Leetcode35. 搜尋插入位置
阿新 • • 發佈:2020-08-29
問題
水題
給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
程式碼
自己寫麻煩了,時間複雜度不如標答快!
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 elseif(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