码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode OJ:Search Insert Position(查找插入位置)

时间:2015-10-10 10:23:04      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

首线是自己一个比较蠢的方法,可能当时没怎么细细的想,大体的思路就是,将vector中元素存放到set中(因为set插入的时候已经排好序了),首先查找,找不到的话在插入,兵器记下插入位置,指针递增到那个地方的时候就找到了那个位置。如果第一次找到那个位置的就直接递增找到那个位置即可,代码见下,很不优雅:

 1 class Solution {
 2 public:
 3     int searchInsert(vector<int>& nums, int target) {
 4         set<int>tmpSet(nums.begin(), nums.end());//因为set已经排好序了,所以用set
 5         int i = 0;
 6         set<int>::iterator sItor;
 7         if((sItor = (tmpSet.find(target))) == tmpSet.end())//不在set中的话,就先插入
 8             sItor = tmpSet.insert(target);
 9         for(auto itor = tmpSet.begin(); itor != it.first; ++itor){
10             i++;   
11         return i;
12     }
13 };

但是其实在网上找了点好的答案,实际上这个就是二分法的一个小小的变形而已:

 1 class Solution {
 2 public:
 3     int searchInsert(vector<int>& nums, int target) {
 4         int beg = 0;
 5         int end = nums.size() - 1;
 6         int mid;
 7         while(beg <= end){
 8             mid = (beg + end) >> 1;
 9             if(nums[mid] > target)
10                 end = mid - 1;
11             else if(nums[mid] < target)
12                 beg = mid + 1;
13             else
14                 return mid;
15         }
16         int sz = nums.size();
17         if(end < 0) reutrn 0;    //这个地方应该注意,不要搞反了
18         if(beg >= sz) reutrn sz;
19         return beg;    //这一步应该注意,很关键
21     }
22 };

二分法不可小觑,细节还是很多的,仔细看看都能有不要的收获。其实实际上感觉写出来不太容易错的还是上面写的那种方法。

LeetCode OJ:Search Insert Position(查找插入位置)

标签:

原文地址:http://www.cnblogs.com/-wang-cheng/p/4863917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!