标签:
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