LeetCode 1053 交換一次的先前排列

2021-10-07 15:04:37 字數 1340 閱讀 9403

給你乙個正整數的陣列 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中的數字...