0.问题描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
示例 2:
示例 3:
示例 4:
1.问题分析
典型的二分查找,虽然不知道leetcode的数据为什么暴力搜索比二分法的时间还短。
但是第一次写的也太丑啦吧喂!
简单的代码才见功力呀。
2.代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| class Solution { public: int searchInsert(vector<int>& nums, int target) { int i,mid; int low=0,high=nums.size()-1; if(target>nums[high]){ return high+1; } if(target<nums[low]){ return 0; } if(target==nums[low]){ return low; }< 大专栏 leetcode笔记——35.搜索插入位置 - CrowFeabr/> while(high-low>1){ if(target==nums[low]){ return low; } if(target==nums[high]){ return high; } mid=(low+high)/2; if(nums[mid]==target){ return mid; } else if(nums[mid]<target){ low=mid; } else{ high=mid; } } if(nums[mid]<target){ return mid+1; } else{ return mid; } } };
|
太!丑!了!
虽然判断多了肯定快,但是太丑了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public: int searchInsert(vector<int>& nums, int target) { int i,mid; int low=0,high=nums.size()-1; while (low <= high ){ mid = (low + high )/2; if (nums[mid] < target) low = mid + 1; else if ( nums[mid] > target) high = mid - 1; else return mid; } if(nums[mid]<target){ return mid+1; } return mid; } };
|
几个要点:
- low<=high
- low=mid+1
- high=mid-1
- return mid