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 ", i, solve.searchInsert(nums, i)); 42 } 43 return 0; 44 }
通过~