LeetCode 35. 搜尋插入位置
阿新 • • 發佈:2021-01-03
技術標籤:leetcodeleetcode資料結構演算法java
題目描述: 給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
示例 1:
輸入: [1,3,5,6], 5
輸出: 2
示例 2:
輸入: [1,3,5,6], 2
輸出: 1
示例 3:
輸入: [1,3,5,6], 7
輸出: 4
示例 4:
輸入: [1,3,5,6], 0
輸出: 0
來源:LeetCode官網
題目連結
方法1 暴力求解
思路: 根據target去排序數組裡找,找什麼呢,找和target相等的值或者當前值小於target且下一值大於target的值。
class Solution {
public int searchInsert(int[] nums, int target) {
int i = 0;
while(i < nums.length && nums[i] < target)
i ++;
return i;
}
}
分析:
程式碼簡單,思路明瞭,時間複雜度為* O(n) *,其中n為陣列元素個數。
結果:
方法2 二分查詢
思路: 思路上沒有新奇的,主要是方法問題,使用二分查詢,可以降低複雜度。
程式碼:
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while(left <= right){
int mid = (left + right) / 2;
if(nums[mid] == target)
return mid;
else if(nums[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return left;
}
}
分析:
時間複雜度為 O(log n) ,其中n為陣列長度。
結果: