230217 力扣简704 二分查找 15号的每日一题

自己写的二分查找 很长时间不写代码了 都忘干净了 

 看完答案更改 附在下面了

发现并不需要重复递归调用 只需要更改标记头尾的值并且验证满足循环条件即可

 

在if语句里面写了多个return 但是嵌套调用会将代码返回到调用那块的标志点 所以是整个不对的

 

package est;

//import java.util.Arrays;

public class LeetcodeTest {
    
    public static void main(String []args) {
        
        System.out.println("test");
        int[] nums = {1,2,3,4,5,6,7};
        System.out.println(LeetcodeTest.search(nums,-1));
    }
    


    public static int search(int[] nums, int target) {
        
        return LeetcodeTest.midsearch(nums, 0, nums.length-1, target);
    }
    
    public static int midsearch(int[] nums, int head, int tail,int target) {
        int mid = (head + tail)/2;  //    int mid = (head + tail)<<1;
        if(head>tail) {
            return -1;
        }
        if(nums[mid]==target) {
            return mid;
        }
        else if(nums[mid]>target) {
            tail = mid-1;
            LeetcodeTest.midsearch(nums,head,tail,target);
        }
        else if(nums[mid]<target) {
            head = mid+1;
            LeetcodeTest.midsearch(nums,head,tail,target);
        }
        return mid;
    }
}

 

//并不需要重复递归调用 只需要更改标记头尾的值并且验证满足循环条件即可

//可以把取数组的第mid个值写成单独的一句,这样就没必要多次取值了

package est;
//并不需要重复递归调用 只需要更改标记头尾的值并且验证满足循环条件即可 可以把取数组的第mid个值写成单独的一句,这样就没必要多次取值了
/*给定一个 n 个元素有序的(升序)整型数组 nums 
 * 和一个目标值 target  ,写一个函数搜索 nums 中的 target,
 * 如果目标值存在返回下标,否则返回 -1
*/
public class LeetcodeTest {
    
    public static void main(String []args) {
        
        System.out.println("test");
        int[] nums = {1,2,3,4,5,6,7};
        System.out.println(LeetcodeTest.search(nums,0));
    }
    
    public static int search(int[] nums, int target) {
        int head = 0;
        int tail = nums.length-1;
        int mid = 0;
        while(head<=tail) {
            mid = head+(tail-head)/2; //注意mid的设置 
            if(nums[mid] == target) {
                return mid;
            }
            else if(nums[mid] > target) {
                tail=mid-1;
            }
            else if(nums[mid] < target) {
                head=mid+1;;
            }
        }
        return -1;
    }
}

 

posted @ 2023-02-17 11:09  Ssshiny  阅读(15)  评论(0)    收藏  举报