1. 程式人生 > 實用技巧 >Leetcode35. 搜尋插入位置

Leetcode35. 搜尋插入位置

問題

水題

給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。

你可以假設陣列中無重複元素。

程式碼

自己寫麻煩了,時間複雜度不如標答快!

 1 class Solution {
 2 public:
 3     int searchInsert(vector<int>& nums, int target) {
 4         if(target < nums[0] || nums.size() == 0) return 0;
 5         if(target > nums[nums.size()-1
] ) return nums.size(); 6 7 for(int i = 0;i < nums.size();i++) { 8 if(nums[i] == target ) 9 return i; 10 if(nums[i] < target && nums[i+1] > target) 11 return i+1; 12 } 13 return 0; 14 }
15 };

於是又重新寫了折半搜尋。。。。

 1 class Solution {
 2 public:
 3     int searchInsert(vector<int>& nums, int target) {
 4        int low = 0,high = nums.size()-1;
 5        while(low <= high){
 6            int mid = (low + high) /2;
 7            if(nums[mid] == target ) return mid;
 8            else
if(nums[mid] < target) low = mid + 1; 9 else high = mid - 1; 10 } 11 return low; 12 } 13 };

總結:

1.本題出現了未結束的返回值錯誤

Line 14: Char 5: fatal error: control may reach end of non-void function [-Wreturn-type] }

應該仔細檢查每一個控制流是否都有返回值

程式最後加上 return 0;問題解決!!

2. 關於折半搜尋的跳出迴圈條件一定是low <= high 而不是小於 ,如果小於將會漏掉邊界條件。

這也是自己之前沒有注意的一個點!! https://blog.csdn.net/yuanren201/article/details/105336591