1
1
class Solution {
2
2
public:
3
3
int searchInsert (vector<int >& nums, int target) {
4
- int len = nums.size ();
5
- if (len == 0 ){
6
- nums.push_back (target);
7
- return 0 ;
4
+ int l = 0 , h = nums.size () - 1 ;
5
+ while (l <= h) {
6
+ int m = l + ((h - l) >> 1 );
7
+ if (nums[m] == target) return m;
8
+ if (nums[m] < target) l = m + 1 ;
9
+ else h = m - 1 ;
8
10
}
9
-
10
- auto iter = find (nums.begin (),nums.end (),target);
11
-
12
- if (iter != nums.end ()){
13
- return binarySearch (nums,0 ,len - 1 ,target);
14
- }
15
- else {
16
- int slow = 0 ;
17
- int fast = 1 ;
18
-
19
- if (nums[0 ] >= target)return 0 ;
20
- if (nums[len-1 ] <= target)return len;
21
-
22
- while (fast < len){
23
- if (nums[slow] <= target && nums[fast] > target){
24
- nums.insert (nums.begin () + fast,target);
25
- return fast;
26
- }
27
- else {
28
- slow++;
29
- fast++;
30
- }
31
- }
32
- return fast;
33
- }
34
- }
35
-
36
-
37
- int binarySearch (vector<int > &nums,int left,int right,int target){
38
- if (nums[left] == target)return left;
39
- if (nums[right] == target)return right;
40
-
41
- int mid = (left + right) / 2 ;
42
-
43
- if (nums[mid] > target)return binarySearch (nums,left+1 ,mid,target);
44
- else if (nums[mid] < target)return binarySearch (nums,mid,right-1 ,target);
45
- else return mid;
46
- }
47
-
48
- };
49
-
50
- -------------------------
51
- class Solution {
52
- public:
53
- int searchInsert (vector<int >& nums, int target) {
54
- if (nums.size () == 0 ) {
55
- nums.push_back (target);
56
- return 0 ;
57
- }
58
- unsigned int i = 0 ;
59
-
60
- while (i<nums.size ()&&nums[i]<target)i++;
61
-
62
- nums.insert (nums.begin () + i, target);
63
- return i;
11
+ return l;
64
12
}
65
13
};
0 commit comments