网易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());
    }
}
 
 查看2道真题和解析
查看2道真题和解析