zoukankan      html  css  js  c++  java
  • b_wy_排列(思维转换 + 双指针)

    给定长度为 m 的序列 T,求一个长度为 n 且字典序最小的排列.并且要求序列 T 为所求排列的子序列(1<=m<=n<=1e6)

    思路:长度为n,看样例发现是只包含1~n的元素,因为是要求T只是子序列,直接用双指针比较谁小谁就在前面

    def solve(A, n, m):
        vis, ans, B = [False for i in range(n+1)], [0 for i in range(n)], []
        for x in A:
            vis[x] = True
        for i in range(1,n+1):
            if not vis[i]:
                B.append(i)
        i, j, k = 0, 0, 0
        while i < len(A) and j < len(B):
            if A[i] < B[j]: ans[k], k, i = A[i], k+1, i+1
            else: ans[k], k, j = B[j], k+1, j+1
        while i < len(A): ans[k], k, i = A[i], k+1, i+1
        while j < len(B): ans[k], k, j = B[j], k+1, j+1
        return ans
    
    n, m = map(int, input().split())
    A = list(map(int, input().split()))
    print(" ".join(map(str, solve(A, n, m))))
    
  • 相关阅读:
    js bubbleSort
    关于“ ,”的迷
    移位
    emacs 一些很有用的快捷键
    input&output
    async&await
    用dbforge调试procedure
    开发中常用的工具
    用Firefox的debugger来调试JavaScript
    Hibernate映射关系配置
  • 原文地址:https://www.cnblogs.com/wdt1/p/14408496.html
Copyright © 2011-2022 走看看