[java编程题]数组中值出现了一次的数字

题目描述

链接:https://www.nowcoder.com/questionTerminal/200d8d789f9f431999fac795bb094356
来源:牛客网

给定一个数字arr,其中只有有两个数字出现了奇数次,其它数字都出现了偶数次,按照从小到大顺序输出这两个数。

输入描述:
输入包含两行,第一行一个整数n(1 \leq n \leq 10^5)(1≤n≤10
5 ),代表数组arr的长度,第二行n个整数,代表数组arr,arr[i]为32位整数。

输出描述:
输出出现奇数次的两个数,按照从小到大的顺序。

示例1
输入
4
1 1 2 3
输出
2 3
示例2
输入
6
11 22 11 23 23 45
输出
22 45

解题思路

比较的·笨办法,就是将输入的数,每个位上的数存在数组里,对数组排序, 然后统计每个数字出现的次数,如果count是奇数就存在ans数组里,一定注意判断是最后i-1 时,因为我们把array的末尾数字存了两份。

代码实现

package java_20200718;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @ Created with IntelliJ IDEA.
 * @ClassName Test
 * @Description
 * @Author by小房
 * @Date 2020/7/18 16:31
 */
public class Test {
    public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int arr = scanner.nextInt();
            int[] array = new int[arr];
            for (int i = 0; i < arr; i++) {
                array[i] = scanner.nextInt();
            }
            Arrays.sort(array);
            int[] array2 = new int[arr+1];

        for (int i = 0; i < arr; i++) {
            array2[i] = array[i];
        }
        array2[arr] = array[arr -1];
        int len = array2.length;
            int[] ans = new int[2];
            int j = 0;
            for (int i = 0; i < len-1; i++) {
                int count = 1;
                while ( i < len-1 && array2[i] == array2[i+1] ) {
                    count++;
                    i++;
                }
                if ((count % 2 != 0) && i != len-1) {
                    ans[j] = array2[i];
                    j++;
                }
                if ((count % 2 == 0) && i == len-1) {
                    ans[j] = array2[i];
                    j++;
                }

            }
        System.out.println(ans[0] + " " + ans[1]);
    }
}

改进

我们使用list来存储,省掉了很多不必要的麻烦。在这里利用临时变量tmp来比较,不在考虑数组越界的情况。

代码实现

package java_20200718;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * @ Created with IntelliJ IDEA.
 * @ClassName Test2
 * @Description
 * @Author by小房
 * @Date 2020/7/19 23:03
 */
public class Test2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        List<Integer> ans = new ArrayList<>();
        int n = scanner.nextInt();
        for (int i = 0; i < n ; i++) {
            list.add(scanner.nextInt());
        }
        list.sort(Integer::compareTo);
        // System.out.println(list);
        int i = 0;
        int tmp = list.get(0);
        while (i < n){
            int count = 0;
            while (i<n && list.get(i) == tmp   ) {
                count++;
                i++;
            }
            if (count % 2 != 0) {
                ans.add(list.get(i-1));
            }
            if (i < n) {
                tmp = list.get(i);
            }

        }
        System.out.println(ans.get(0) + " " + ans.get(1));
    }
}

一定注意牛客的输出格式!!!!!!

你可能感兴趣的:(每日一题)