思路,这道题用二分,唯一的不同就是,1,a[left]<a[mid]。那么说明左右有序,如果key还在a[left],a[mid]之间,就在这里找,如果不在就在右边找。注意:这里<要改成<=才对。
2,如果不是条件一,那么就是右边有序,看key是否在mid和right之间,在的话这个范围找,不在的话,左边找。
答案:
public static int findElement(int[] a, int n,int key){ int left = 0; int right = a.length - 1; while(left <= right){ int mid = (left + right) / 2; if(key == a[mid]) return mid; if(a[left] <= a[mid]){ if(key <= a[mid] && key >= a[left]){ right = mid -1; } else{ left = mid + 1; } } else{ if(key > a[mid] && key < a[right]){ left = mid + 1; } else{ right = mid -1; } } } return -1; }
时间: 2024-10-10 08:12:50