本文共 1273 字,大约阅读时间需要 4 分钟。
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。
编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。
输入: nums = [2,5,6,0,0,1,2], target = 0
输出: true输入: nums = [2,5,6,0,0,1,2], target = 3
输出: falsepublic class LC81 { public static void main(String[] args) { int[] num={1,3}; int target=4; System.out.println(search(num,target)); } //方法1:先找到旋转的分界点,然后对这两边分别进行二分查找 public static boolean search(int[] nums, int target) { if(nums==null||nums.length==0) return false; int i=0; while (i<(nums.length-1)&&nums[i]target){ j=mid-1; }else{ i=mid+1; } } return false; } //方法2:二分查找 public static boolean search2(int[] nums, int target) { if(nums==null||nums.length==0) return false; int i=0,j=nums.length-1; while (i<=j){ int mid=i+(j-i)/2; if(nums[mid]==target) return true; // 当left,middle,right三个值相同默认为左边有序了,但是111101 其中0可能出现在左边也可能出现在右边,所以只能遍历 if(nums[i]==nums[mid]&&nums[j]==nums[mid]){ i++;j--; }else if(nums[i]<=nums[mid]){//如果左边有序 if(nums[i]<=target&&target
转载地址:http://cgbrb.baihongyu.com/