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