给定长度为 m 的序列 T ,求一个长度为 n 且字典序最小的排列.并且要求序列 T 为所求排列的子序列.题目保证这样的排列一定存在. S 是 T 的子序列,当且仅当 S 是 T 通过删除任意数量元素所得到的. 字典序是单词在字典中的排列顺序,先比较第一个字母,然后比较第二个字母,依次类推。-笔试面试资料

这是qklbishe.com第7433 篇笔试面试资料
提供答案分析,通过本文《给定长度为 m 的序列 T ,求一个长度为 n 且字典序最小的排列.并且要求序列 T 为所求排列的子序列.题目保证这样的排列一定存在.
S 是 T 的子序列,当且仅当 S 是 T 通过删除任意数量元素所得到的. 字典序是单词在字典中的排列顺序,先比较第一个字母,然后比较第二个字母,依次类推。-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:
给定长度为 m 的序列 T ,求一个长度为 n 且字典序最小的排列.并且要求序列 T 为所求排列的子序列.题目保证这样的排列一定存在.

S 是 T 的子序列,当且仅当 S 是 T 通过删除任意数量元素所得到的.
字典序是单词在字典中的排列顺序,先比较第一个字母,然后比较第二个字母,依次类推。
给定长度为 m 的序列 T ,求一个长度为 n 且字典序最小的排列.并且要求序列 T 为所求排列的子序列.题目保证这样的排列一定存在.     S 是 T 的子序列,当且仅当 S 是 T 通过删除任意数量元素所得到的.    字典序是单词在字典中的排列顺序,先比较第一个字母,然后比较第二个字母,依次类推。 portal20
这道题有问题吧。题目说的按字典序了,但实际上后台用的是数值排序。
本质是合并两个有序数组。
import java.util.*;  public class Main {     public static void main(String[] args) {         Scanner input = new Scanner(System.in);                  int n = input.nextInt();         int m = input.nextInt();                  List<Integer> fix = new ArrayList<>();         List<Integer> free = new ArrayList<>();         boolean[] v = new boolean[n + 1];                  for (int i = 0; i < m; i++) {             int tmp = input.nextInt();             v[tmp] = true;             fix.add(tmp);         }                  for (int i = 1; i <= n; i++)             if (!v[i])                 free.add(i);                  //Collections.sort(fix);         //Collections.sort(free);                  int i = 0;         int j = 0;                  //String sm = "";         List<Integer> ans = new ArrayList<>();         while (i < free.size() && j < fix.size()) {             //String s1 = sm + free.get(i);             //String s2 = sm + fix.get(j);             if (free.get(i) <= fix.get(j)) {                 ans.add(free.get(i++));                 //sm = s1;             }             else {                 ans.add(fix.get(j++));                 //sm = s2;             }         }         while (i < free.size()) {             ans.add(free.get(i++));         }         while (j < fix.size()) {             ans.add(fix.get(j++));         }                  for (i = 0; i < n; i++) {             if (i == 0)                 System.out.print(ans.get(i));             else                 System.out.print(" " + ans.get(i));         }         System.out.println();     } }

2021-03-09 20:11:01 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 给定长度为 m 的序列 T ,求一个长度为 n 且字典序最小的排列.并且要求序列 T 为所求排列的子序列.题目保证这样的排列一定存在. S 是 T 的子序列,当且仅当 S 是 T 通过删除任意数量元素所得到的. 字典序是单词在字典中的排列顺序,先比较第一个字母,然后比较第二个字母,依次类推。-笔试面试资料

提供最优质的资源集合

立即查看 了解详情