题解 | #两数之和#

两数之和

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) {
        // write code here

        int[] result = {-1, -1};
        Map<Integer, List<Integer>> nubmersIndex = new HashMap<>();
        for (int i = 0; i < numbers.length; i++) {
            if (nubmersIndex.containsKey(numbers[i])) {
                nubmersIndex.get(numbers[i]).add(i + 1);
            } else {
                List<Integer> so = new ArrayList<>();
                so.add(i + 1);
                nubmersIndex.put(numbers[i], so);
            }
        }
        Arrays.sort(numbers);
        int r =  search(numbers, target);
        int diff = 0;
        for (int i = 0; i < r + 1 && i < numbers.length; i++) {
            diff = target - numbers[i];
            if (nubmersIndex.containsKey(diff)) {
                result[0] = nubmersIndex.get(numbers[i]).get(0);
                List<Integer> resList = nubmersIndex.get(diff);
                if (resList.size() > 1) {
                    result[1] = resList.get(1);
                } else {
                    result[1] = resList.get(0);
                }

                break;
                //return new int[]{i+1,nubmersIndex.get(diff)};
            }
        }
	  	Arrays.sort(result);
        return result;
    }

    public int search(int[] numbers, int target) {
        int len = numbers.length;
        int left = 0, right = len; //左闭右开所以right为len
        while (left < right) {
            int mid = left + (right - left) /
                      2; //int mid = (left+right)/2 避免整数算法溢出
            if (numbers[mid] < target) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return right;
    }
}

全部评论

相关推荐

求问!考研下岸,打算参加春招,我这个bg能进啥厂,或者需要搞点深度项目再投吗
Java抽象带篮子_...:直接海投,可以看看我的考研失利速成冲春招贴,里面详细写了简历怎么写,学哪些项目可以速成
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务