LeetCode 0912. Sort an Array Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0912. Sort an Array

Description

Given an array of integers nums, sort the array in ascending order and return it.

You must solve the problem without using any built-in functions in O(nlog(n)) time complexity and with the smallest space complexity possible.

 

Example 1:

Input: nums = [5,2,3,1]
Output: [1,2,3,5]
Explanation: After sorting the array, the positions of some numbers are not changed (for example, 2 and 3), while the positions of other numbers are changed (for example, 1 and 5).

Example 2:

Input: nums = [5,1,1,2,0,0]
Output: [0,0,1,1,2,5]
Explanation: Note that the values of nums are not necessarily unique.

 

Constraints:

  • 1 <= nums.length <= 5 * 104
  • -5 * 104 <= nums[i] <= 5 * 104

Solutions

Solution 1

PythonJavaC++GoTypeScriptJavaScriptRustKotlin
class Solution: def sortArray(self, nums: List[int]) -> List[int]: def quick_sort(l, r): if l >= r: return x = nums[randint(l, r)] i, j, k = l - 1, r + 1, l while k < j: if nums[k] < x: nums[i + 1], nums[k] = nums[k], nums[i + 1] i, k = i + 1, k + 1 elif nums[k] > x: j -= 1 nums[j], nums[k] = nums[k], nums[j] else: k = k + 1 quick_sort(l, i) quick_sort(j, r) quick_sort(0, len(nums) - 1) return nums(code-box)

Solution 2

PythonJavaC++GoTypeScriptJavaScript
class Solution: def sortArray(self, nums: List[int]) -> List[int]: def merge_sort(l, r): if l >= r: return mid = (l + r) >> 1 merge_sort(l, mid) merge_sort(mid + 1, r) i, j = l, mid + 1 tmp = [] while i <= mid and j <= r: if nums[i] <= nums[j]: tmp.append(nums[i]) i += 1 else: tmp.append(nums[j]) j += 1 if i <= mid: tmp.extend(nums[i : mid + 1]) if j <= r: tmp.extend(nums[j : r + 1]) for i in range(l, r + 1): nums[i] = tmp[i - l] merge_sort(0, len(nums) - 1) return nums(code-box)

Solution 3

Java
class Solution { private int[] nums; public int[] sortArray(int[] nums) { this.nums = nums; mergeSort(0, nums.length - 1); return nums; } private void mergeSort(int l, int r) { if (l >= r) { return; } int mid = (l + r) >> 1; mergeSort(l, mid); mergeSort(mid + 1, r); int i = l, j = mid + 1, k = 0; int[] tmp = new int[r - l + 1]; while (i <= mid && j <= r) { if (nums[i] <= nums[j]) { tmp[k++] = nums[i++]; } else { tmp[k++] = nums[j++]; } } while (i <= mid) { tmp[k++] = nums[i++]; } while (j <= r) { tmp[k++] = nums[j++]; } for (i = l; i <= r; ++i) { nums[i] = tmp[i - l]; } } }(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !