java 算法练习题

1. 给出一个排序好的数组和一个数,求数组中连续元素的和等于所给数的子数组

  public static void main(String[] args) {
        int[] num = { 1, 2, 2, 3, 4, 5, 6, 7, 8, 9 };
        int sum = 7;
        findSum(num, sum);
        findSum1(num, sum);

  }

    public static void findSum(int[] num, int sum) {
        int sum1 = 0;
        for (int i = 0; i < num.length - 1; i++) {
            sum1 = 0;
            for (int j = i; j < num.length; j++) {
                sum1 += num[j];
                if (sum1 == sum) {
                    int temp = j < num.length ? j + 1 : j;
                    for (int c : Arrays.copyOfRange(num, i, temp)) {
                        System.out.print(c + " ");
                    }
                    System.out.println();
                }
            }
        }
    }

    public static void findSum1(int[] num, int sum) {
        int left = 0;
        int right = 0;

        for (int i = 0; i < num.length; i++) {
            int curSum = 0;
            left = i;
            right = i;
            while (curSum < sum) {
                curSum += num[right++];
            }
            if (curSum == sum) {
                for (int j = left; j < right; j++) {
                    System.out.print(num[j] + " ");
                }
                System.out.println();
            }
        }
    }

2. 找出数组中出现次数最多的数字

public static void main(String[] args) {
        int[] num = { 1, 2, 2, 2, 2, 2, 2, 4, 2, 4, 6, 4, 2, 6, 8, 2, 7, 7 };
        System.out.println(moreThanHaft1(num));
    }

    public static int moreThanHaft1(int[] num) {
        int temp = 1;
        int index = -1;
        for (int i = 0; i < num.length; i++) {
            int count = 0;
            for (int j = 0; j < num.length; j++) {
                if (num[i] == num[j]) {
                    count++;
                }
            }
            if (count > temp) {
                temp = count;
                index = i;
            }
        }
        return index == -1 ? -1 : num[index];
    }

你可能感兴趣的:(java 算法练习题)