题解 | #数组中只出现一次的两个数字#

数组中只出现一次的两个数字

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;
    }
}
全部评论

相关推荐

头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务