首页 > 网易8.8笔试-JAVA岗第二题
头像
Demoncxyy
编辑于 2020-08-08 19:24
+ 关注

网易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());

    }


}



全部评论

(0) 回帖
加载中...
话题 回帖

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐