Leetcode 35. Search Insert Position
Posted Hwangzhiyoung
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 35. Search Insert Position相关的知识,希望对你有一定的参考价值。
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.
Example 1:
Input: [1,3,5,6], 5 Output: 2
Example 2:
Input: [1,3,5,6], 2 Output: 1
Example 3:
Input: [1,3,5,6], 7 Output: 4
Example 1:
Input: [1,3,5,6], 0 Output: 0
采用分治算法的思想,先从中间比较,然后看是哪一边,接着再分治,主要注意下标是从0开始,而且要想清楚边界条件如果target在数组的最左边,或者target在数组的最右边该怎么插入target。
1 #include <stdio.h> 2 3 #include <vector> 4 5 class Solution { 6 public: 7 int searchInsert(std::vector<int>& nums, int target) { 8 int index = -1; 9 int begin = 0; 10 int end = nums.size() - 1; 11 while (index == -1){ 12 int mid = (begin + end) / 2; 13 if (target == nums[mid]){ 14 index = mid; 15 } 16 else if (target < nums[mid]){ 17 if (mid == 0 || target > nums[mid - 1]){ 18 index = mid; 19 } 20 end = mid - 1; 21 } 22 else if (target > nums[mid]){ 23 if (mid == nums.size() - 1 || target < nums[mid + 1]){ 24 index = mid + 1; 25 } 26 begin = mid + 1; 27 } 28 } 29 return index; 30 } 31 }; 32 33 int main(){ 34 int test[] = {1, 3, 5, 6}; 35 std::vector<int> nums; 36 Solution solve; 37 for (int i = 0; i < 4; i++){ 38 nums.push_back(test[i]); 39 } 40 for (int i = 0; i < 8; i++){ 41 printf("i = %d index = %d\\n", i, solve.searchInsert(nums, i)); 42 } 43 return 0; 44 }
通过~
以上是关于Leetcode 35. Search Insert Position的主要内容,如果未能解决你的问题,请参考以下文章
[leetcode]Binary Search-35. Search Insert Position
LeetCode 35. Search Insert Position
[Binary Search] Leetcode 35, 74
LeetCode OJ 35. Search Insert Position