From 75d1ad6486b1f1eef4b278cfdd1ec34ebd81029d Mon Sep 17 00:00:00 2001 From: rain84 Date: Thu, 17 Oct 2024 22:11:39 +0300 Subject: [PATCH 1/2] feat: add solutions to lc problem: No.0670 --- .../0600-0699/0670.Maximum Swap/README.md | 54 +++++++++++++++++++ .../0600-0699/0670.Maximum Swap/README_EN.md | 54 +++++++++++++++++++ .../0600-0699/0670.Maximum Swap/Solution2.js | 17 ++++++ .../0600-0699/0670.Maximum Swap/Solution2.ts | 17 ++++++ 4 files changed, 142 insertions(+) create mode 100644 solution/0600-0699/0670.Maximum Swap/Solution2.js create mode 100644 solution/0600-0699/0670.Maximum Swap/Solution2.ts diff --git a/solution/0600-0699/0670.Maximum Swap/README.md b/solution/0600-0699/0670.Maximum Swap/README.md index bdd3bdd7d42a4..a40dc649918b7 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 { + + +### 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/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(''); +} From 855174422ee5c6e0221bade272e685731b59071d Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Fri, 18 Oct 2024 13:08:36 +0800 Subject: [PATCH 2/2] Update README.md --- solution/0600-0699/0670.Maximum Swap/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solution/0600-0699/0670.Maximum Swap/README.md b/solution/0600-0699/0670.Maximum Swap/README.md index a40dc649918b7..a0806f2766415 100644 --- a/solution/0600-0699/0670.Maximum Swap/README.md +++ b/solution/0600-0699/0670.Maximum Swap/README.md @@ -237,7 +237,7 @@ impl Solution { -### Solution 2: Space Optimized Greedy +### 方法二:贪心 + 空间优化