1. 程式人生 > >Java&LeetCode 初入門——035. 搜尋插入位置

Java&LeetCode 初入門——035. 搜尋插入位置

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看看。上面的評論更多,國內外大神也更多。