一道使用演算法解決的java題(關於hashmap的問題)
阿神
阿神 2017-05-27 17:41:09
0
3
528

leetcode的第一題,這種方法可以實現O(n)複雜度解

題目要求是給一個int[],例如 nums = [2, 7, 11, 15],給一個target = 9。
若存在兩個數的和為target值,例如 nums[0] nums[1] = 2 7 = 9
return [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;
}
阿神
阿神

闭关修行中......

全部回覆(3)
phpcn_u1582

for迴圈裡面的map.put()不是賦值嗎? ? ?

曾经蜡笔没有小新

題目是要求得兩個數的和為目標值為給定值,那麼一定要遍歷至少兩個數.
(1)如果先初始化,花費算法時間O(n);然後再遍歷查找到第一正確的值時,需要演算法時間O(k), 0  這種情況實現是:

    1)先初始化map,
   2)遍歷第一個數2, target - 2 = 9 - 2 = 7
  3)判斷7也在map中,回傳正確結果.
  注意:要遍歷到第一個正確數字

 
(2)如果不縣初始化,那麼一定會遍歷到第二個正確的數,才停止,算法時間為O(k)(1  這種情況實現是:

 1)遍历第一个数2, target - 2 = 9 - 2 = 7
 2)判断7是否在map,发现不在,把2加入map,继续遍历
 3)直到遍历到7, target - 7 = 9 - 7 = 2
 4)判断2在map,返回正确结果
 注意,要遍历到第二个正确数.
小葫芦

沒有 Key 的情况下,HashMap.containsKey(Key) 返回的是 false 不包括 Key

    public boolean containsKey(Object key) {
        return getNode(hash(key), key) != null;
    }

不會出現你所想的空指標錯誤。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!