diff --git a/solution/0600-0699/0670.Maximum Swap/README.md b/solution/0600-0699/0670.Maximum Swap/README.md index bdd3bdd7d42a4..a0806f2766415 100644 --- a/solution/0600-0699/0670.Maximum Swap/README.md +++ b/solution/0600-0699/0670.Maximum Swap/README.md @@ -235,4 +235,58 @@ impl Solution { + + +### 方法二:贪心 + 空间优化 + + + +#### TypeScript + +```ts +function maximumSwap(num: number): number { + const ans = [...String(num)]; + let [min, max, maybeMax, n] = [-1, -1, -1, ans.length]; + + for (let i = n - 1; i >= 0; i--) { + if (ans[i] > (ans[maybeMax] ?? -1)) maybeMax = i; + if (i < maybeMax && ans[i] < ans[maybeMax]) { + [min, max] = [i, maybeMax]; + } + } + + if (~min && ~max && min < max) { + [ans[min], ans[max]] = [ans[max], ans[min]]; + } + + return +ans.join(''); +} +``` + +#### JavaScript + +```js +function maximumSwap(num) { + const ans = [...String(num)]; + let [min, max, maybeMax, n] = [-1, -1, -1, ans.length]; + + for (let i = n - 1; i >= 0; i--) { + if (ans[i] > (ans[maybeMax] ?? -1)) maybeMax = i; + if (i < maybeMax && ans[i] < ans[maybeMax]) { + [min, max] = [i, maybeMax]; + } + } + + if (~min && ~max && min < max) { + [ans[min], ans[max]] = [ans[max], ans[min]]; + } + + return +ans.join(''); +} +``` + + + + + diff --git a/solution/0600-0699/0670.Maximum Swap/README_EN.md b/solution/0600-0699/0670.Maximum Swap/README_EN.md index 8f722d5214098..cd4b834a6fdcb 100644 --- a/solution/0600-0699/0670.Maximum Swap/README_EN.md +++ b/solution/0600-0699/0670.Maximum Swap/README_EN.md @@ -239,4 +239,58 @@ impl Solution { + + +### Solution 2: Space Optimized Greedy + + + +#### TypeScript + +```ts +function maximumSwap(num: number): number { + const ans = [...String(num)]; + let [min, max, maybeMax, n] = [-1, -1, -1, ans.length]; + + for (let i = n - 1; i >= 0; i--) { + if (ans[i] > (ans[maybeMax] ?? -1)) maybeMax = i; + if (i < maybeMax && ans[i] < ans[maybeMax]) { + [min, max] = [i, maybeMax]; + } + } + + if (~min && ~max && min < max) { + [ans[min], ans[max]] = [ans[max], ans[min]]; + } + + return +ans.join(''); +} +``` + +#### JavaScript + +```js +function maximumSwap(num) { + const ans = [...String(num)]; + let [min, max, maybeMax, n] = [-1, -1, -1, ans.length]; + + for (let i = n - 1; i >= 0; i--) { + if (ans[i] > (ans[maybeMax] ?? -1)) maybeMax = i; + if (i < maybeMax && ans[i] < ans[maybeMax]) { + [min, max] = [i, maybeMax]; + } + } + + if (~min && ~max && min < max) { + [ans[min], ans[max]] = [ans[max], ans[min]]; + } + + return +ans.join(''); +} +``` + + + + + diff --git a/solution/0600-0699/0670.Maximum Swap/Solution2.js b/solution/0600-0699/0670.Maximum Swap/Solution2.js new file mode 100644 index 0000000000000..5f96574097e85 --- /dev/null +++ b/solution/0600-0699/0670.Maximum Swap/Solution2.js @@ -0,0 +1,17 @@ +function maximumSwap(num) { + const ans = [...String(num)]; + let [min, max, maybeMax, n] = [-1, -1, -1, ans.length]; + + for (let i = n - 1; i >= 0; i--) { + if (ans[i] > (ans[maybeMax] ?? -1)) maybeMax = i; + if (i < maybeMax && ans[i] < ans[maybeMax]) { + [min, max] = [i, maybeMax]; + } + } + + if (~min && ~max && min < max) { + [ans[min], ans[max]] = [ans[max], ans[min]]; + } + + return +ans.join(''); +} diff --git a/solution/0600-0699/0670.Maximum Swap/Solution2.ts b/solution/0600-0699/0670.Maximum Swap/Solution2.ts new file mode 100644 index 0000000000000..9784bc33c8e87 --- /dev/null +++ b/solution/0600-0699/0670.Maximum Swap/Solution2.ts @@ -0,0 +1,17 @@ +function maximumSwap(num: number): number { + const ans = [...String(num)]; + let [min, max, maybeMax, n] = [-1, -1, -1, ans.length]; + + for (let i = n - 1; i >= 0; i--) { + if (ans[i] > (ans[maybeMax] ?? -1)) maybeMax = i; + if (i < maybeMax && ans[i] < ans[maybeMax]) { + [min, max] = [i, maybeMax]; + } + } + + if (~min && ~max && min < max) { + [ans[min], ans[max]] = [ans[max], ans[min]]; + } + + return +ans.join(''); +}