給你乙個正整數的陣列 a(其中的元素不一定完全不同),請你返回可在一次交換(交換兩數字 a[i] 和 a[j] 的位置)後得到的、按字典序排列小於 a 的 最大可能排列。
如果無法這麼操作,就請返回原陣列。
示例 1:
輸入:[3,
2,1]
輸出:[3,
1,2]
解釋:交換 2 和 1
示例 2:
輸入:[1,
1,5]
輸出:[1,
1,5]
解釋:
這已經是最小排列
示例 3:
輸入:[1,
9,4,
6,7]
輸出:[1,
7,4,
6,9]
解釋:交換 9 和 7
示例 4:
輸入:[3,
1,1,
3]輸出:[1,
3,1,
3]解釋:交換 1 和 3
1<= a.length <=
10000
1<= a[i]
<=
10000
類似題目:leetcode 31. 下乙個排列(線性掃瞄)
注意題目說,只能交換一次
class
solution
swap
(a[l]
, a[r]);
return a;}}
;
64 ms 23.7 mb
class
solution
:# py3
defprevpermopt1
(self, a: list[
int])-
> list[
int]
: l, r =0,
0for i in
range(1
,len
(a))
:if a[i-1]
> a[i]
: l, r = i-
1, i
elif a[i]
< a[l]
and a[i]
> a[r]
: r = i
t = a[l]
a[l]
= a[r]
a[r]
= t return a
356 ms 14.9 mb 公平的糖果交換 LeetCode
愛麗絲和鮑勃有不同大小的糖果棒 a i 是愛麗絲擁有的第 i 塊糖的大小,b j 是鮑勃擁有的第 j 塊糖的大小。因為他們是朋友,所以他們想交換乙個糖果棒,這樣交換後,他們都有相同的糖果總量。乙個人擁有的糖果總量是他們擁有的糖果棒大小的總和。返回乙個整數陣列 ans,其中 ans 0 是愛麗絲必須交...
LeetCode 670 最大交換
class solution 將num的各個位上的值存於向量中 int len res.size int k 0 for int i len 1 i 0 i 求出位置j i 1之前 包括j 的最大值 if res i 0 i 重新算出最大值 return n 思路 倒著推,因為將num值的各個位的值...
LeetCode 670 最大交換
題目 給定乙個非負整數,你至多可以交換一次數字中的任意兩位。返回你能得到的最大值 示例1 輸入 2736 輸出 7236 解釋 交換數字2和數字7。示例2 輸入 9973 輸出 9973 解釋 不需要交換。思路 先根據給定的數字,把數字的每一位拆分並放到 list 集合中,並且利用 list中的數字...