题解 | #数组中只出现一次的两个数字#
数组中只出现一次的两个数字
https://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8
思路一
- 先排序,再遍历判断;
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型一维数组 * @return int整型一维数组 */ public int[] FindNumsAppearOnce (int[] array) { // write code here int[] res = new int[2]; int count = 0; Arrays.sort(array); for(int i = 0; i < array.length; ++i){ // System.out.println("i = " + i); if(i == 0){ if(array[i] != array[i + 1]) res[count++] = array[i]; } else if(i == (array.length-1)){ if(array[i] != array[i-1]) res[count++] = array[i]; } else if(array[i] != array[i-1] && array[i] != array[i+1]){ res[count++] = array[i]; if(count == 2){ break; } } } return res; } }
思路二
- 使用Java提供的TreeSet集合,可以实现排序;
- 将只出现一次的数据保存到TreeSet中,出现多次的数据从TreeSet中删除。
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型一维数组 * @return int整型一维数组 */ public int[] FindNumsAppearOnce (int[] array) { // write code here int[] res = new int[2]; TreeSet<Integer> set = new TreeSet<>(); for(int i = 0; i < array.length; ++i){ if(set.contains(array[i])){ set.remove(array[i]); } else { set.add(array[i]); } } int i = 0; for(Integer num : set){ res[i++] = num; } return res; } }