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