力扣啟蒙 - 開啟算法的世界
點擊上方 Java學(xué)習(xí)之道,選擇 設(shè)為星標
Part1力扣
刷力扣,刷力扣,力扣究竟是什么呢?
力扣(LeetCode)是領(lǐng)扣網(wǎng)絡(luò)旗下專注于程序員技術(shù)成長和企業(yè)技術(shù)人才服務(wù)的品牌。源自美國硅谷,力扣為全球程序員提供了專業(yè)的IT技術(shù)職業(yè)化提升平臺,有效幫助程序員實現(xiàn)快速進步和長期成長。
而刷力扣也就是在力扣的題庫里刷算法題。
Part2力扣啟蒙
下面來引入力扣的啟蒙題來感受一下算法題的魅力吧。
1力扣第一題:
兩數(shù)之和
給定一個整數(shù)數(shù)組
nums和一個整數(shù)目標值target,請你在該數(shù)組中找出 和為目標值 的那 兩個整數(shù),并返回它們的 數(shù)組下標。你可以假設(shè)每種輸入只會對應(yīng)一個答案。但是,數(shù)組中同一個元素在答案里不能重復(fù)出現(xiàn)。
你可以按任意順序返回答案。

2解題思路
暴力解法
很多人新手看到這些題目,第一眼就是暴力跑法對吧? 但是都來練算法了暴力破解不是在真的沒辦法的情況下就算了。
哈希映射
讓我們來看看這道題比較優(yōu)等的解法吧 (算法只有更好,沒有最好)
什么是哈希映射
哈希表的結(jié)構(gòu)就是鍵值對的形式 >> [key -- value] 我們可以利用這個特殊的數(shù)據(jù)結(jié)構(gòu)來處理我們這道題目
① 先來看看 Java的 HashMap API 中一個 方法.
方法要求傳入一個鍵,會返回在該哈希表中是否存在跟傳入的鍵對應(yīng)的映射關(guān)系. 也就是說我們可以將沒有找的數(shù)組元素放進哈希表中,讓后面的元素去匹配。
② 利用for循環(huán)來處理題目給出的數(shù)組,題目給出了一個 target, 我們就利用這個 target 和 數(shù)組中的數(shù)字相減來得到一個目標值,然后在哈希表中查找是否有這個值,有則可以找到題目所要的兩個目標索引,沒有找到的話就將值再 put 進表中。
題解
public int[] twoSum(int[] nums, int target) {
/* map的鍵為數(shù)組的元素 值為數(shù)組的元素下標 */
Map<Integer,Integer> map = new HashMap<>();
/* 循環(huán)數(shù)組 */
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target - nums[i])){
return new int[]{map.get(target - nums[i]),i};
}
/* 遍歷開始時為空表,就直接將第一個元素put進表 */
/* 沒有找到對應(yīng)的映射就進行put */
map.put(nums[i], i);
}
/* 數(shù)組中沒有符合的兩個數(shù)字的情況,
但是題目已經(jīng)幫我們排除了這個可能性 */
return null;
}

測試結(jié)果
該測試結(jié)果是在IDEA中通過 leetcode 插件自動生成題目提交測試代碼的,不會使用 leetcode插件的也可以通過 [刷leetcode神器] IDEA 插件 leetcode editor 查看。
-
| 更多精彩文章 -
▽加我微信,交個朋友 長按/掃碼添加↑↑↑



