Closest Numbers

  • + 0 comments

    My Java solution:

    public static List<Integer> closestNumbers(List<Integer> arr) {
            if(arr.size() == 2) return Arrays.asList(arr.get(0), arr.get(1));
            //goal: find pair with smallest abs diff
            //sort arr
            Collections.sort(arr);
            //init new min
            int min = arr.get(1) - arr.get(0);
            List<Integer> minIdices = new ArrayList<>();
            minIdices.add(arr.get(0));
            minIdices.add(arr.get(1));
            //compare adj elements
            for(int i = 2; i < arr.size(); i++){
                int diff = arr.get(i) - arr.get(i - 1);
                //if new min is found clear ans list
                if(diff < min){
                    min = diff;
                    minIdices.clear();
                    minIdices.add(arr.get(i - 1));
                    minIdices.add(arr.get(i));
                }
                else if(diff == min){
                    minIdices.add(arr.get(i - 1));
                    minIdices.add(arr.get(i));
                }
            }
            return minIdices;
        }