자바 프로 그래 밍 문제:오늘 의 첫 번 째 필기시험 문제

제목 설명:출력 배열 의 차 이 는 주어진 값 의 수 대 갯 수 이 고 중복 되 는 한 쌍 은 한 번 만 계산 합 니 다.입력:첫 번 째 줄 에 정수 n 과 k 를 입력 하 십시오.(n 은[1,1000000],k 는[0,100]에 있 습 니 다.)두 번 째 줄 은 n 개의 정 수 를 입력 하 십시오.출력:정수,구 한 수 대 개 수 를 표시 합 니 다.
예 1:입력:
 4 0 
 1 1 1 1 

출력:
  1

예 2:입력:
5 2
1 3 3 2 5

출력:
 2

코드:
import java.util.Scanner;

public class Main {

    private static int count(int[] array, int k) {
        int count = 0;
        int size = array.length;
        if (size == 1)
            return 0;
        for (int i = 0; i < size - 1; i++) {
            if (array[i] == array[i + 1]) {
                i = tail(array, i + 1);
                if (k == 0) { // k = 0 ,          
                    count++;
                    continue;
                }
            }
            for (int j = i + 1; j < size; j++) {
                if (j != size - 1 && array[j] == array[j + 1])
                    j = tail(array, j + 1);
                if (array[i] + k == array[j]) {
                    count++;
                }
            }
        }
        return count;

    }

    //             
    private static int tail(int[] array, int index) {
        int i = index;
        for (; i < array.length; i++) {
            if (array[i] != array[i - 1])
                return i - 1;
        }
        return array.length - 1;
    }

    //     ,    
    private static void insertionSort(int[] array) {
        int temp;
        int hole;
        for (int i = 1; i < array.length; i++) {
            temp = array[i];
            for (hole = i; hole > 0 && temp < (array[hole - 1]);)
                array[hole] = array[--hole];

            array[hole] = temp;
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();
        int[] array = new int[n];
        for (int i = 0; i < n; i++)
            array[i] = in.nextInt();

        insertionSort(array);
        System.out.println(count(array, k));

    }
}

좋은 웹페이지 즐겨찾기