Leetcode 35 Search Insert Position

来源:互联网 发布:mysql 查看用户连接数 编辑:程序博客网 时间:2024/06/06 15:35

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

一个简单的查找问题。

O(n)的做法

public class Solution {    public int searchInsert(int[] nums, int target) {        if(nums.length == 0){            return 0;        }        for(int i = 0;i<nums.length;i++){            if(target>nums[i])            continue;            if(target == nums[i])            return i;            if(target < nums[i])            return i;                   }        return nums.length ;    }}

但是,这种问题就应该想到二分法(Binary Search),log是个好东西,比n的效果要好很多。

二分法有一个值得注意的地方,就是overflow的问题。

    public int searchInsert(int[] A, int target) {        int low = 0, high = A.length-1;        while(low<=high){            int mid = low +(high - low)/2;//注意这的写法            if(A[mid] == target) return mid;            else if(A[mid] > target) high = mid-1;            else low = mid+1;        }        return low;    }



0 0