index返回错误的值,即1而不是0

92vpleto  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(479)

当我用nums={3,2,4}target=6调试这段代码时,对于key=3,我得到的索引值是1而不是0?有人能告诉我为什么吗?

class Main {
        public int[] twoSum(int[] nums, int target) {
            HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
            for(int i=0;i<nums.length;i++) {
                map.put(nums[i],nums[i]);
            }
            Set<Integer> set = map.keySet();
            ArrayList<Integer> list = new ArrayList<Integer>(set);

            for(int i=0;i<nums.length-1;i++) {
                if(map.containsKey(target-nums[i])) {
                    int key = map.get(target-nums[i]);
                    int index = list.indexOf(key);
                    if(index != i) {
                        nums = new int[2];
                        nums[0] = i;
                        nums[1] = index;
                    }
                }
            }
            return nums;
        }                               
    }
holgip5t

holgip5t1#

HashMap 以及 HashSet 不要保持插入顺序。如果要保留插入顺序,则需要使用 LinkedHashMap 以及 LinkedHashSet .

dgtucam1

dgtucam12#

您可以将数组索引Map到它在初始循环中的值以保留它这是我从leetcode得到的解决方案。通过更正hashmap本身,您的问题得到了解决

public int[] twoSum(int[] arr, int target) {
    HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

    for(int i = 0; i < arr.length; ++i) {
            map.put(arr[i], i);
    }

    for(int j = 0; j < arr.length; ++j) {
        int compliment = target - arr[j];
        if (map.containsKey(compliment) == true && map.get(compliment) != j){
            return new int[] {map.get(compliment), j };
        }
    }

    throw new IllegalArgumentException("No Target");
}

相关问题