Search Insert Position

九章的模板能保证跳出,但是对跳出之后的范围处理,实际上是很麻烦的,这道题的话,考虑没有数,单个数,两个数的情况都是必要的,下面是代码

class Solution(object):
    def searchInsert(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        if not nums:
            return 0

        start, end = 0, len(nums) - 1
        while start + 1 < end:
            mid = start + (end - start) / 2
            if nums[mid] == target:
                return mid
            elif nums[mid] < target:
                start = mid
            else:
                end = mid

        if nums[start] >= target:            # target偏左
            return start
        elif nums[end] < target:             # target在中间
            return end + 1
        else:                                # target偏右
            return end

Java版本

class Solution {
    public int searchInsert(int[] nums, int target) {
        int start = 0;
        int end = nums.length - 1;
        while (start + 1 < end) {
            int mid = start + (end - start) / 2;
            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] > target) { 
                end = mid;
            } else {
                start = mid;
            }
        }

        if (nums[end] < target) {
            return end + 1;
        } else if (nums[start] < target) {
            return end;
        } else {
            return start;
        }
    }
}

results matching ""

    No results matching ""