网易笔试8.8 第二题字典序

package WangYi;

import java.util.HashSet;
import java.util.Scanner;
/*给定 n,再给了一个排列 T,扩充成排列 S(数字 1 - n 各使用一次)。问最小字典序的S
 * 一个T序列,长度为m,扩充为S序列,T为S的子序列,求最小字典序的S【长度为n】
 * 2 1 5===2 1 3 4 5
 * 1 对S序列扩充,得到2 1 5 3 4【填充的时候从1-n开始遍历,将不存在T的数字填充在S序列的后面,填充部分的数据肯定是小于n的,假如T为6 7 8则填充数据为1 2
 * 2 p1指向0,p1指向m,设置一个辅助数组,将3 4插入前面的合适位置
 */

public class Two {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int m = in.nextInt();
		int T[] = new int[m];
		HashSet<Integer> set = new HashSet<Integer>();
		int index = 0;
		int res[] = new int[n];
		for(int i = 0;i<m;i++) {
			T[i] = in.nextInt();
			res[index++] =T[i];
			if(!set.contains(T[i])) {
				set.add(T[i]);
			}
		}		
		for(int i = 1;i<=n;i++) {
			if(set.size()==n) break;
			if(!set.contains(i)) {
				set.add(i);
				res[index++] =i;
			}
		}
//		for (int i = 0; i < res.length; i++) {
//			System.out.println(res[i]);
//		}
		int p1 = 0;
		int p2 = m;
		int res1[] = new int[n];
		int p = 0;
		while(p1<m&&p2<n) {
			if(res[p1]<=res[p2]) {
				res1[p++] = res[p1++];
			}else {
				res1[p++] = res[p2++];
			}
		}
		while(p1<m) res1[p++] = res[p1++];
		while(p2<n) res1[p++] = res[p2++];
		for (int i = 0; i < res1.length; i++) {
			System.out.println(res1[i]);
	    }
	}

}

#网易##笔试题目#
全部评论

相关推荐

#简历#先说一说我自己的想法,很多人都很排斥苍穹外卖,认为没什么技术点和含金量,但实际上我觉得恰恰相反,苍穹外卖虽然代码本身并不是你自身能力的证明,但是是作为一个新人学习时很好的跳板和原始框架,在这个框架上进行的改进可以很好的辐射到你自己的个人成果上,并作为你和面试官聊天的筹码大多数人的苍穹外卖只写增删改查,千篇一律,吸引不了面试官,所以这才让大家误以为只要是苍穹外卖就不要写进简历里这种误区,但实际上如果你在原有的层面上进行改进,并作为你的项目亮点和面试官介绍,告诉他你的苍穹外卖和别人的有什么不同,增加了哪些技术难点,这才显得你是完全自己理解了这个项目,并且有自己动手实践项目的能力,而不是就看了个课程就以为自己会了,就当成自己的了,如此一来,这反而成为你的加分项苍穹外卖为什么看的人最多,说明它好啊,如果它不好,为什么看的人还这么多,想清楚这个逻辑,我觉得要做的最重要的事,就是如何在原有框架上进行改进提效,比起听其他人的话重新搞一个项目性价比高得多,而且我亲测项目并没有成为我找到工作的阻碍,我投的大厂一大半都给我面试了,而且很多不止一个部门,退一万步说,当你手头没有其他项目的时候,有苍穹外卖总比什么都没有的好很多,不需要因为苍穹外卖有任何心理负担关于简历的任何部分都欢迎大家提意见,十分感谢大家,祝大家找实习+秋招顺利上岸,offer拿到手软#简历中的项目经历要怎么写##我的上岸简历长这样##最后再改一次简历##简历##简历被挂麻了,求建议#
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务