給定長度為 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]:
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))))
演算法思維 雙指標法
雙指標可分為三類 其中,滑動視窗 已單獨寫了一篇隨筆,可跳轉檢視。在快慢指標中,又有一類典型演算法,叫 floyd s cycle finding algorithm,其又名floyd s hare and tortoise algorithm。在這裡,我們主要談論左右指標和快慢指標。左右指標 主要...
字串的排列(雙指標)
先給題 給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。換句話說,第乙個字串的排列之一是第二個字串的子串。示例1 輸入 s1 ab s2 eidbaooo 輸出 true 解釋 s2 包含 s1 的排列之一 ba 示例2 輸入 s1 ab s2 eidboaoo 輸出 ...
校賽選拔之 離散化 雙指標 思維
小p在課堂上課,老師留給他乙個簡單的問題 有 nn 條木棍,第 i i 條木棍的長度是 a ia i 總共有 q q 次詢問,每次詢問給定 l l 和 r r 問從 l,r l r 這個區間裡的木棍中,能不能選出 4 4 根木棍組成乙個長方形.現在快要下課了,小p想盡快解決這個問題,希望你可以幫助他...