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

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

http://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8

思路:

  1. 对数组进行排序
  2. 当索引为0或者array.length-1时
    1)若array[0]!=array[1],array[0]为目标值
    2)若array[len-1]!=array[len-2],array[len-1]为目标值
  3. 对于其他索引,判断条件为当前值与前后两个值都不相等。
    注意:此题使用的时间换空间,也可使用HashMap集合做。
    import java.util.*;
    public class Solution {
      /**
       * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
       *
       * 
       * @param array int整型一维数组 
       * @return int整型一维数组
       */
      public int[] FindNumsAppearOnce (int[] array) {
          // write code here
          Arrays.sort(array);//排序
          int[] res=new int[2];//返回数组
          ArrayList<Integer> list=new ArrayList<>();//暂时存储目标值
          int len=array.length;
          //情况1:开头
          if(array[0]!=array[1]){
              list.add(array[0]);
          }
          //情况2:末尾
          if(array[len-1]!=array[len-2]){
              list.add(array[len-1]);
          }
          //情况3:中间
          for(int i=1;i<len-1;i++){
              if(array[i]!=array[i-1] && array[i]!=array[i+1]){
                  list.add(array[i]);
              }
              if(list.size()==2){
                  break;
              }
          }
          //按升序输出数组
          for(int i=0;i<2;i++){
              if(list.get(0)>list.get(1)){
                  res[0]=list.get(1);
                  res[1]=list.get(0);
              }else{
                  res[0]=list.get(0);
                  res[1]=list.get(1);
              }
          }
          return res;
      }
    }
全部评论

相关推荐

萧索X:写篮球联赛干嘛,陪老板打篮球吗。还有实习经历要写自己所在岗位具体完成什么工作,自己的任务具体完成了什么需求,给公司带来了哪些量化增长
点赞 评论 收藏
分享
2025-12-19 21:53
门头沟学院 Java
想做OpenGL:不要一来就把自己定位这么低吧,把大厂当成目标,不断去学技术做项目,最后你至少能学到能找到中小厂的技术水平,你一上来就找这种两千块还要前后端都会的,其实对你用处不会很大,真去了也是打杂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务