1. 程式人生 > 實用技巧 >[網易秋招筆試]第2題(陣列,思維)

[網易秋招筆試]第2題(陣列,思維)

題目


題解

題意:根據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]);
    }
}