题解 | #两数之和#

两数之和

https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f

import java.util.*;


public class Solution {
    /**
     * 
     * @param numbers int整型一维数组 
     * @param target int整型 
     * @return int整型一维数组
     */
    public int[] twoSum (int[] numbers, int target) {
        /**
         * [0,4,3,0],0输出了*/
        // write code here
      /*  Arrays.sort(numbers);
        System.out.println(Arrays.toString(numbers));*/
        int[] res=new int[2];
        //应该使用数组去存储。下标为数字,值为索引位置
        Map<Integer , List<Integer>> map = new HashMap();
        for (int i = 0; i < numbers.length; i++) {
                //重复数则只使用前面的.
            if (map.containsKey(numbers[i])){
                List<Integer> integers = map.get(numbers[i]);
                integers.add(i);
            }
            map.putIfAbsent(numbers[i],new ArrayList<>(Arrays.asList(i)));
        }

        for (int number : numbers) {
            int other = target - number;
            if (map.containsKey(other)){
                Integer integer = map.get(other).get(0);
                Integer integer1 = map.get(number).get(0);
                if (other== number){
                    if (map.get(number).size()>1){
                        integer1 = map.get(number).get(1);
                    }
                }
                if (integer!=null && integer1!=null && integer>integer1){
                    res[0]=integer1+1;
                    res[1]=integer+1;
                }else {
                    res[1]=integer1+1;
                    res[0]=integer+1;
                }
            }
        }

        return res;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务