給定一個排序數組和一個目标值,在數組中找到目标值,并傳回其索引。如果目标值不存在于數組中,傳回它将會被按順序插入的位置。
你可以假設數組中無重複元素。
示例 1:
輸入: [1,3,5,6], 5
輸出: 2
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/search-insert-position
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
解題思路:
1.首先需要确定執行次數 nums.length
2.因為有個目标值,是以用目标值與數組中的資料逐個進行比較,這裡在運作期出現了三種情況:
第一種:當目标值小于數組下标為0的時候
第二種:當目标值大于數組中最後一個元素時
第三種:在數組中間搜尋插入位置
第四種:當目标值等于數組中某個元素
代碼實作:
class Solution {
public int searchInsert(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
if(target==nums[i]){ //這裡對數組中存在相同元素進行判斷
return i;
}else if(target<nums[i]){ //這裡對滴三種情況進行判斷
if(i==0) //這裡對第一種情況進行判斷
return 0;
return i;
}else if(i+1==nums.length){ //這裡對第二種情況進行判斷
return i+1;
}
}
return -1;
}
}
做這道題的時候,條件判斷時出現了一個異常,把第二種情況進入進第三種情況的判斷條件裡面,那麼程式執行結果會報錯。
執行結果:
通過
顯示詳情
執行用時 :
1 ms
, 在所有 Java 送出中擊敗了
78.46%
的使用者
記憶體消耗 :
39.1 MB
, 在所有 Java 送出中擊敗了
52.00%
的使用者
執行用時為 0 ms 的範例:
class Solution {
public int searchInsert(int[] nums, int target) {
if(nums.length==0 || nums==null) {
return 0;
}
int min = 0;
int max = nums.length-1;
while(min<=max) {
int mid = (min+max)/2;
if(nums[mid]==target) {
return mid;
}else if(nums[mid]<target){
min = mid+1;
}else {
max = mid-1;
}
}
return min;
}
}
//這裡典範同學用的是傳說中的二分查找,我也不知道,沒學二分查找。将數組一分為二,如果中間數等于目标數,那麼傳回中間數mid 如果中間數小于目标數,那麼min+1,這相當于往後移了一位,如果中間值小于目标值那麼最大值又減去一位,這相當于将數組一位一位的縮小,然後隻用中間數與目标值進行比較。這樣确實更加明了。給典範同學點贊。