天天看點

數組練習題之 搜尋插入位置

給定一個排序數組和一個目标值,在數組中找到目标值,并傳回其索引。如果目标值不存在于數組中,傳回它将會被按順序插入的位置。

你可以假設數組中無重複元素。

示例 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,這相當于往後移了一位,如果中間值小于目标值那麼最大值又減去一位,這相當于将數組一位一位的縮小,然後隻用中間數與目标值進行比較。這樣确實更加明了。給典範同學點贊。