一道使用算法解決的java題(關于hashmap的問題)
問題描述
leetcode的第一題,這種方法可以實現O(n)復雜度解
題目要求是給一個int[],例如 nums = [2, 7, 11, 15],給一個target = 9。若存在兩個數的和為target值,例如 nums[0] + nums[1] = 2 + 7 = 9return [0, 1].
使用如下解法的時候,有一點疑惑,就是new了一個hashmap,但是并沒有給他賦值,這種情況下是如何實現題目要求的呢?
public int[] twoSum(int[] numbers, int target) { int[] result = new int[2]; Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int i = 0; i < numbers.length; i++) {if (map.containsKey(target - numbers[i])) { result[1] = i + 1; result[0] = map.get(target - numbers[i]); return result;}map.put(numbers[i], i + 1); } return result;}
問題解答
回答1:for循環里面的map.put()不是賦值嗎???
回答2:題目是要求得兩個數的和為目標值為給定值,那么一定要遍歷至少兩個數.(1)如果先初始化,花費算法時間O(n);然后再遍歷查找到第一正確的值時,需要算法時間O(k), 0<k<n.總時間是O(n+k), 要判斷是不是自己,如(10 = 5 + 5).這種情況實現是:
1)先初始化map, 2)遍歷第一個數2, target - 2 = 9 - 2 = 7 3)判斷7也在map中,返回正確結果. 注意:要遍歷到第一個正確數
(2)如果不縣初始化,那么一定會遍歷到第二個正確的數,才停止,算法時間為O(k)(1<k<=n).不用判斷自己. 這種情況實現是:
1)遍歷第一個數2, target - 2 = 9 - 2 = 7 2)判斷7是否在map,發現不在,把2加入map,繼續遍歷 3)直到遍歷到7, target - 7 = 9 - 7 = 2 4)判斷2在map,返回正確結果 注意,要遍歷到第二個正確數.回答3:
沒有 Key 的情況下,HashMap.containsKey(Key) 返回的是 false 不包括 Key。
public boolean containsKey(Object key) {return getNode(hash(key), key) != null; }
不會出現你所想的空指針錯誤。
相關文章:
1. mysql - 一個表和多個表是多對多的關系,該怎么設計2. python 如何實現PHP替換圖片 鏈接3. html5 - iOS的webview加載出來的H5網頁,怎么修改html標簽select的樣式字體?4. 一個mysql聯表查詢的問題5. python如何不改動文件的情況下修改文件的 修改日期6. javascript - git clone 下來的項目 想在本地運行 npm run install 報錯7. mysql主從 - 請教下mysql 主動-被動模式的雙主配置 和 主從配置在應用上有什么區別?8. angular.js - 三大框架react、vue、angular的分析9. python - django 里自定義的 login 方法,如何使用 login_required()10. 主從備份 - 跪求mysql 高可用主從方案
