首页 > 其他 > 详细

Leetcode 35. Search Insert Position

时间:2018-03-24 20:01:15      阅读:121      评论:0      收藏:0      [点我收藏+]

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

原文:https://www.cnblogs.com/Hwangzhiyoung/p/8641059.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!