日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

1. 两数之和(Java)

發布時間:2023/12/15 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1. 两数之和(Java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,并返回它們的數組下標。你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。你可以按任意順序返回答案。


首先該題要求時間復雜度低于O(n^2),可以采用空間換時間的方法采用哈希表的方式。
key為target與num[]中值之差,value為num[]中值的下標。檢查哈希表中是否存在target與當前值之差:如果存在則返回該結果,如果不存在則將其存入哈希表中。

public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map = new HashMap<>();for(int i = 0; i < nums.length; i++){if(map.containsKey(target - nums[i])) {return new int[] {map.get(target - nums[i]), i};}map.put(nums[i], i);}//throw new IllegalArgumentException("No two sum solution");//題解中還有拋出異常的做法,但是不了解兩者優劣,希望有大神不吝賜教return new int[0];} }

使用哈希表的方法很簡單易懂,需要注意的就是哈希沖突的問題,上述方法可以有效避開hash沖突。每次寫入時,判斷條件不是當前的key本身存不存在,而是key和tag之間的差值存不存在,這一點很重要。假定只有一個解,也就是說重復元素再多都無所謂。如果有3個或者以上的重復元素,代表這個重復元素不可能是解,所以寫入map的時候直接覆蓋也無所謂;如果只有兩個重復元素,同樣的道理,假如這個重復元素是解,那么必定是兩個重復元素的和等于tag。這種情況下,當遇到第二個重復元素時,不會寫入map,這個時候直接已經取到解了。 所以這種方式,不用考慮hash沖突的問題。

總結

以上是生活随笔為你收集整理的1. 两数之和(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。