題目描述:
輸入:乙個陣列(nums),乙個數(target)
輸出:從陣列中取兩個數使得兩數之和等於target,輸出這兩個數的下標
1,一開始的想法是,使用兩重迴圈直接一一遍歷,窮舉出這兩個數,並得到他們的下標
public
static
int twosum1(int nums, int target) }}
//引數錯誤的異常
throw
new illegalargumentexception();
}
這個演算法的時間複雜度是o(n^2),並不是很理想
2,我們學過map,如果我們把key設為陣列中的數,value設為下標,hash索引的複雜度是常數級別的,在已知乙個數的情況下是很容易從hashmap中得到這個數以及這個數的位置的
public
static
int twosum2(int nums, int target)
for (int i = 0; i < nums.length; i++) ;}}
throw
new illegalargumentexception();
}
這時候演算法的時間複雜度就降下來了變成了o(n)
這個問題還可以脫戰成三個數或者四個數的問題,雖然數值增加了 ,但是方法的思想都是一樣的,可以利用兩個數的問題來解決。
總結:從這個題目中領悟到我們在做下標和數值這類問題的時候可以嘗試使用hashmap來解決,因為這個過程中的查詢是常數級別的,遇到這類問題也要很好的嘗試往數學中的集合上靠,這樣才能把演算法的時間複雜度降下來。
LeetCode001 兩數之和 Two Sum
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的 兩個 整數。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9,所以返回 0,1 ...
leetcode 打家劫舍系列
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。輸入 1,2,3,...
Leetcode長征系列 Sqrt x
原題 implementint sqrt int x compute and return the square root of x.以下為引用 牛頓迭代法 為了方便理解,就先以本題為例 計算x2 n的解,令f x x2 n,相當於求解f x 0的解,如左圖所示。首先取x0,如果x0不是解,做乙個經...