网易8.8笔试-JAVA岗第二题

分享一下我的思路:建立两个数组长度分别为int[m]target和int[n-m]other,其中n是最终输出的序列长度,m是题目所给的序列长度。
遍历从1到100000之间的数据,如果它不存在于target数组就将其加入other数组,直到other数组填充完毕。
最后设立两个指针,分别从两个数组头开始遍历,比较两个数大小,每次将较小的数拼接到stringbuilder里,直到两个数组遍历完成。
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);

        int n=in.nextInt();
        int m=in.nextInt();

        int []arr=new int[m];

        Set<Integer> set=new HashSet<Integer>();

        for(int i=0;i<m;i++){
            arr[i]=in.nextInt();
            set.add(arr[i]);
        }

        int len=n-m;
        int[]temp=new int[len];
        int count=0;

        //////////////////////////////////////
        for(int i=1;i<=100000;i++){
            if(count==len)break;
            if(!set.contains(i)){
                temp[count++]=i;
            }
        }

        ////////////////////////////
        int left=0;
        int right=0;
        StringBuilder builder=new StringBuilder();

        while(left<m&&right<len){
            if(arr[left]<temp[right]){
                builder.append(arr[left]);
                builder.append(" ");
                left++;
            }else{
                builder.append(temp[right]);
                builder.append(" ");
                right++;
            }
        }

        if(left>=m){
            for(int k=right;k<len;k++){
                builder.append(temp[k]);
                builder.append(" ");
            }
        }

        if(right>=len){
            for(int k=left;k<m;k++){
                builder.append(arr[k]);
                builder.append(" ");
            }
        }

        builder.deleteCharAt(builder.length()-1);

        System.out.println(builder.toString());

    }


}



#笔试题目##网易#
全部评论

相关推荐

10-21 23:48
蚌埠坦克学院
csgq:可能没hc了 昨天一面完秒挂
点赞 评论 收藏
分享
我即大橘:耐泡王
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务