[網易秋招筆試]第2題(陣列,思維)
阿新 • • 發佈:2020-08-08
題目
題解
題意:根據m長子序列求長度為n的字典序最小的原序列,原序列元素為1ton;
題解:使用n個數中除子序列外剩餘陣列成otherNum陣列。
兩個指標指向兩個陣列首元素,比較子序列當前元素與otherNum陣列當前元素,小的插入新陣列,指標右移。
程式碼
import java.util.Scanner; import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int m = in.nextInt(); int[] subNums=new int[m]; int[] nums=new int[n]; int[] otherNums=new int[n-m]; Set<Integer> set=new HashSet<>(); for(int i=0;i<m;++i){ int num=in.nextInt(); subNums[i]=num; set.add(num); } int otherIdx=0; for(int i=1;i<=n;++i){ if(!set.contains(i)){ otherNums[otherIdx++]=i; } } //處理 int idx=0; otherIdx=0; int subIdx=0; while(idx<n&&subIdx<m&&otherIdx<n-m){ if(subNums[subIdx]<otherNums[otherIdx]){ nums[idx++]=subNums[subIdx++]; }else{ nums[idx++]=otherNums[otherIdx++]; } } while(subIdx<m){ nums[idx++]=subNums[subIdx++]; } while(otherIdx<n-m){ nums[idx++]=otherNums[otherIdx++]; } //列印 for(int i=0;i<n-1;++i){ System.out.print(nums[i]+" "); } System.out.print(nums[n-1]); } }