public class Solution {
public static int findPartMin(int[] data,int lo,int hi){
while(lo<=hi){
int mid = lo+(hi-lo)/2;
if(data[mid]<data[mid-1]&&data[mid]<data[mid+1])
return mid;
else if(data[mid]>data[mid-1])
hi = mid-1;
else if(data[mid]>data[mid+1])
lo = mid+1;
}
return -1;
}
public int getLessIndex(int[] arr) {
if(arr.length==1)
return 0;
else if(arr.length>1){
if(arr[0]<arr[1])
return 0;
else if(arr[arr.length-1]<arr[arr.length-2])
return arr.length-1;
else
return findPartMin(arr,1,arr.length-2);
}else
return -1;
}
}
对于一个有序数组arr,再给定一个整数num,请在arr中找到num这个数出现的最左边的位置。
给定一个数组arr及它的大小n,同时给定num。请返回所求位置。若该元素在数组中未出现,请返回-1。
[1,2,3,3,4],5,3
返回:2
import java.util.*;
public class LeftMostAppearance {
public int findPos(int[] arr, int n, int num) {
// write code here
int left = 0,right = n-1;
int pos = -1;
while(left<=right){
int mid = left+(right-left)/2;
if(arr[mid]>num)
right = mid-1;
else if(arr[mid]<num)
left = mid+1;
else{
pos = mid;
right = mid-1;
}
}
return pos;
}
}
有一个有序数组arr,其中不含有重复元素,请找到满足arr[i]==i条件的最左的位置。如果所有位置上的数都不满足条件,返回-1。
给定有序数组arr及它的大小n,请返回所求值。
[-1,0,2,3],4
返回:2
import java.util.*;
public class Find {
public int findPos(int[] arr, int n) {
// write code here
int left = 0,right = n-1;
while(left<=right){
int mid = left+(right-left)/2;
if(arr[left]==left)
return left;
if(arr[mid]>mid)
right = mid-1;
else if(arr[mid]<mid)
left = mid+1;
else
return mid;
}
return -1;
}
}
原文:http://www.cnblogs.com/lxk2010012997/p/5551202.html