力扣启蒙 - 开启算法的世界
點擊上方 Java學(xué)習(xí)之道,選擇 設(shè)為星標(biāo)
每天18:30點,干貨準(zhǔn)時奉上!
Part1力扣
刷力扣,刷力扣,力扣究竟是什么呢?
力扣(LeetCode)是領(lǐng)扣網(wǎng)絡(luò)旗下專注于程序員技術(shù)成長和企業(yè)技術(shù)人才服務(wù)的品牌。源自美國硅谷,力扣為全球程序員提供了專業(yè)的IT技術(shù)職業(yè)化提升平臺,有效幫助程序員實現(xiàn)快速進步和長期成長。
而刷力扣也就是在力扣的題庫里刷算法題。
Part2力扣啟蒙
下面來引入力扣的啟蒙題來感受一下算法題的魅力吧。
1力扣第一題:
兩數(shù)之和
給定一個整數(shù)數(shù)組
nums和一個整數(shù)目標(biāo)值 ?target,請你在該數(shù)組中找出 和為目標(biāo)值 的那 兩個整數(shù),并返回它們的 數(shù)組下標(biāo)。你可以假設(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ù)字相減來得到一個目標(biāo)值,然后在哈希表中查找是否有這個值,有則可以找到題目所要的兩個目標(biāo)索引,沒有找到的話就將值再 put 進表中。
題解
public?int[]?twoSum(int[]?nums,?int?target)?{/*?map的鍵為數(shù)組的元素?值為數(shù)組的元素下標(biāo)?*/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?查看。
-- END?--
總結(jié)
以上是生活随笔為你收集整理的力扣启蒙 - 开启算法的世界的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 预处理命令
- 下一篇: 小鹏G9连续四周位居中大型纯电SUV销量