二分搜索插入位置 (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

浙公网安备 33010602011771号