From 8eafc93f2f3f5882d66ffcaef7f3e7ed0c2d1ab5 Mon Sep 17 00:00:00 2001 From: Yudhvir Singh Date: Mon, 17 Feb 2025 15:07:10 -0800 Subject: [PATCH] Max swap --- python/problem_670/README.md | 25 +++++++++++++++++++++++++ python/problem_670/solution1.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 python/problem_670/README.md create mode 100644 python/problem_670/solution1.py diff --git a/python/problem_670/README.md b/python/problem_670/README.md new file mode 100644 index 0000000..64dbc87 --- /dev/null +++ b/python/problem_670/README.md @@ -0,0 +1,25 @@ +# 670. Maximum Swap + +You are given an integer num. You can swap two digits at most once to get the maximum valued number. + +Return the maximum valued number you can get. + + + +Example 1: + +Input: num = 2736 +Output: 7236 +Explanation: Swap the number 2 and the number 7. + +Example 2: + +Input: num = 9973 +Output: 9973 +Explanation: No swap. + + + +Constraints: + + 0 <= num <= 108 diff --git a/python/problem_670/solution1.py b/python/problem_670/solution1.py new file mode 100644 index 0000000..bde4ec5 --- /dev/null +++ b/python/problem_670/solution1.py @@ -0,0 +1,28 @@ +class Solution: + def maximumSwap(self, num: int) -> int: + # we need to track what is the highest number + # from the right of current idx + + # convert the int to str + str_num = list(str(num)) + n = len(str_num) + + max_right_idx = [0] * n + # last idx will always be same + max_right_idx[n - 1] = n - 1 + + for i in range(n - 2, -1, -1): + # if the current number is greater than max of the right + if str_num[i] > str_num[max_right_idx[i + 1]]: + max_right_idx[i] = i + # keep the max from right + else: + max_right_idx[i] = max_right_idx[i + 1] + + # now we go from left to right + for j in range(n): + if str_num[j] < str_num[max_right_idx[j]]: + str_num[j], str_num[max_right_idx[j]] = str_num[max_right_idx[j]], str_num[j] + return int("".join(str_num)) + + return num