1.暴力法求解:
思想:利用兩個for迴圈對數字進行遍歷,第乙個for迴圈迴圈位置到nums.length - 1,第二個for迴圈起始為i+1.
// 時間複雜度:o(n^2)
// 空間複雜度:o(1)
public
static
int[
]twosum
(int
nums,
int target);}
}}throw
newillegalargumentexception
("no two sum soulution!");
}
2.利用雜湊表求解:
思想:建立乙個雜湊表,對於每乙個x
,我們首先查詢雜湊表中是否存在target - x
,如果不存在將它放入雜湊表中,然後將x
插入到雜湊表中,即可保證不會讓x
和自己匹配。
//時間複雜度:o(n),其中 o(n) 是陣列中的元素數量。對於每乙個元素 x,我們可以 o(1)地尋找 target - x。
//空間複雜度:o(n),其中 o(n) 是陣列中的元素數量。主要為雜湊表的開銷。
public
static
int[
]twosum
(int
nums,
int target);}
//如果沒有則將這個數和它的下標放入雜湊表
hashmap.
put(nums[i]
, i);}
//程式不存在兩個數相加等於target的合則丟擲異常
throw
newillegalargumentexception
("no two sum soulution!");
}
總結:
這道題是letcode的第一題,也就是我們常說的夢開始的地方。但其實對於我這種可以說完全沒有基礎的人來說這還是比較困難地,沒有思路,不知道該怎麼寫下去,所以再刷leetcode的題之前一定要把基礎打牢,然後對資料結構的知識有一點的體系化了解。
在leetcode老湯有這樣乙個方法:
首先, 如果你碰到乙個演算法, 不知道最優解的話, 那麼你就先用最簡單、最暴力的解法
然後, 找到暴力解法的效能瓶頸, 不斷的優化, 優化的方法可能有好幾個, 你可以都分析下
最後, 選擇乙個最優的解法, 看看還能不能繼續優化, 在追求程式極致效能的過程中, 你的功力會慢慢提高的
但其實最主要的還是你得擁有一定的資料結構與演算法的知識體系。
所以好好加油,當不會什麼的時候就好好認真學,慢慢地取積累知識,持之以恆就會發生質變了。
leetcode簡單題第一題python3
題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1...
LeetCode第一題 曼哈頓距離
你現在手裡有乙份大小為 n x n 的 地圖 網格 grid,上面的每個 區域 單元格 都用 0 和 1 標記好了。其中 0 代表海洋,1 代表陸地,你知道距離陸地區域最遠的海洋區域是是哪乙個嗎?請返回該海洋區域到離它最近的陸地區域的距離。我們這裡說的距離是 曼哈頓距離 manhattan dist...
Leetcode 第一題 兩數之和
給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所...