二分搜索插入位置 (leetcode 35)

一:解题思路

这个题目是二分搜索的变形题目,与标准的二分搜索只有一点有区别,如果没有找到返回begin即可。Time:O(log(n)),Space:O(1)

二:完整代码示例 (C++版和Java版)

C:

int searchInsert(int* nums, int numsSize, int target) {
    if (nums == NULL) return -1;

    int low = 0;
    int high = numsSize - 1;

    while (low <= high) {
        int mid = low + (high-low) / 2;
        if (nums[mid] > target) high = mid - 1;
        else if (nums[mid] < target) low = mid + 1;
        else return mid;
    }

    return low;
}

 

C++:

class Solution 
 {
 public:
     int searchInsert(vector<int>& nums, int target)
     {
         if (nums.size() == 0) return -1;

         int begin = 0;
         int end = nums.size() - 1;

         while (begin <= end)//需要注意这里是<=
         {
             int mid = begin + (end - begin) / 2;//如果想进一步的提升效率的话,可以将/改为>>

             if (nums[mid] > target)
             {
                 end = mid - 1;
             }
             else if (nums[mid] < target)
             {
                 begin = mid + 1;
             }
             else
             {
                 return mid;
             }
         }

         return begin;
     }
 };

Java:

class Solution
{
    public int searchInsert(int[] nums, int target)
    {
          int begin=0,end=nums.length-1;

          while(begin<=end)
          {
              int mid=begin+(end-begin)/2;

              if(nums[mid]>target)
              {
                  end=mid-1;
              }
              else if(nums[mid]<target)
              {
                  begin=mid+1;
              }
              else
              {
                  return mid;
              }
          }

          return begin;
    }
}

 

Python:

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        n=len(nums)
        if n==0:
            return -1
        low=0
        high=n-1

        while low<=high:
            mid=low+(high-low)//2
            if nums[mid]>target:
                high=mid-1
            elif nums[mid]<target:
                low=mid+1
            else:
                return mid

        return low

 

posted @ 2020-03-13 11:38  repinkply  阅读(185)  评论(0)    收藏  举报