码迷,mamicode.com
首页 > 其他好文 > 详细

二分搜索

时间:2016-06-01 22:41:10      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0]<arr[1],那么arr[0]是局部最小;如果arr[N-1]<arr[N-2],那么arr[N-1]是局部最小;如果0<i<N-1,既有arr[i]<arr[i-1]又有arr[i]<arr[i+1],那么arr[i]是局部最小。 给定无序数组arr,已知arr中任意两个相邻的数都不相等,写一个函数,只需返回arr中任意一个局部最小出现的位置即可。
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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!