Java&LeetCode 初入門——035. 搜尋插入位置
阿新 • • 發佈:2019-01-14
Java&LeetCode 初入門——035. 搜尋插入位置
文內程式碼全部採用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
個人解法
這題拿到手首先肯定想到的是 二分法查詢,但是當我寫完二分法的結果之後,居然告訴我超出時間限制,我真是氣死了。
還不如直接查詢,從頭開始,一個一個比較,最後執行時間才4,ms,輕輕鬆鬆80%。
執行用時: 4 ms, 在Search Insert Position的Java提交中擊敗了86.52% 的使用者
基本思想就是,從頭開始挨個查詢。如果大於當前數nums[i],那麼就標記位置(因為是排序陣列)。這裡需要注意:目標數target取代的位置是比自己略大的數的位置,所以要return i+1。根據示例1,這裡也不能新增等號,否則不能將target插入在原數之前。
class Solution {
public int searchInsert(int[] nums, int target) {
int loc =0;//存放位置
for (int i = 0; i < nums.length; i++) {
if (target>nums[i]) {
loc=i+1;
}
}
return loc;
}
}
在看書的時候複習了 Array類的binarysearch()方法。寫了新的演算法,直接呼叫這個功能,程式碼簡潔。
class Solution {
public int searchInsert (int[] nums, int target) {
if (Arrays.binarySearch(nums,target)>=0) {
return Arrays.binarySearch(nums,target);
} else {
return -Arrays.binarySearch(nums,target)-1;
}
}
}
官方解法
本題截止微博發表時間,leedcode中文官網尚未有官方解法。
看了一下評論區,也沒有什麼大神解法,很多都是和博主一樣的暴力查詢。有空上外文leedcode看看。上面的評論更多,國內外大神也更多。