日期:2026年8月20日
LeetCode 題目連結:3069. Distribute Elements Into Two Arrays I
解題想法
簡單題。題目給一個長度 $n$ 的陣列 $nums$,依序從 $nums$ 讀取數據,先將 $nums[0]$ 存到陣列 $arr1$,將 $nums[1]$ 存到陣列 $arr2$,接下來 $nums[2]$ 到 $nums[n-1]$ 則是依照 $arr1, arr2$ 的末項決定要接在哪一個陣列的後面,如果 $arr1$ 末項大於 $arr2$ 末項,則 $nmus$ 取出的數字接在 $arr1$ 後面,反之則接在 $arr2$ 後面。最後再將 $arr2$ 接在 $arr1$ 後面,回傳 $arr1$。基本上只要按照題目要求操作即可,如果用 Python list 或是 C++ vector 可以改變長度,寫起來很方便;如果用 C array 則要記錄目前儲存資料的索引值,會比較麻煩一點。
Python 程式碼
Runtime: 0 ms, beats 100.00%. Memory: 19.30 MB, beats 61.54%.
class Solution:
def resultArray(self, nums: List[int]) -> List[int]:
arr1, arr2 = [nums[0]], [nums[1]]
n = len(nums)
for i in range(2, n):
if arr1[-1] > arr2[-1]:
arr1.append(nums[i])
else:
arr2.append(nums[i])
return arr1 + arr2
Runtime: 0 ms, beats 100.00%. Memory: 19.31 MB, beats 22.76%.
class Solution:
def resultArray(self, nums: List[int]) -> List[int]:
n = len(nums)
arr1, arr2 = [0]*n, [0]*n
arr1[0] = nums[0]
arr2[0] = nums[1]
i, j = 0, 0
for k in range(2, n):
if arr1[i] > arr2[j]:
i += 1
arr1[i] = nums[k]
else:
j += 1
arr2[j] = nums[k]
for k in range(j+1):
i += 1
arr1[i] = arr2[k]
return arr1
C++ 程式碼
Runtime: 1 ms, beats 32.96%. Memory: 23.87 MB, beats 66.37%.
class Solution {
public:
vector<int> resultArray(vector<int>& nums) {
vector<int> arr1 = {nums[0]}, arr2 = {nums[1]};
int n = (int)nums.size();
for(int i = 2; i < n; i++) {
if (arr1.back() > arr2.back()) arr1.push_back(nums[i]);
else arr2.push_back(nums[i]);
}
arr1.insert(arr1.end(), arr2.begin(), arr2.end());
return arr1;
}
};
Runtime: 0 ms, beats 100.00%. Memory: 23.85 MB, beats 66.37%.
class Solution {
public:
vector<int> resultArray(vector<int>& nums) {
int n = (int)nums.size();
vector<int> arr1 (n, 0), arr2 (n, 0);
arr1[0] = nums[0];
arr2[0] = nums[1];
int i = 0, j = 0;
for(int k = 2; k < n; k++) {
if (arr1[i] > arr2[j]) {
i++;
arr1[i] = nums[k];
} else {
j++;
arr2[j] = nums[k];
}
}
for(int k = 0; k <= j; k++) {
i++;
arr1[i] = arr2[k];
}
return arr1;
}
};
C 語言程式碼
Runtime: 0 ms, beats 100.00%. Memory: 12.24 MB, beats 72.00%.
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* resultArray(int* nums, int numsSize, int* returnSize) {
int* arr1 = (int*) malloc(numsSize * sizeof(int));
int* arr2 = (int*) malloc(numsSize * sizeof(int));
*returnSize = numsSize;
arr1[0] = nums[0];
arr2[0] = nums[1];
int i = 0, j = 0;
for(int k = 2; k < numsSize; k++) {
if (arr1[i] > arr2[j]) {
i++;
arr1[i] = nums[k];
} else {
j++;
arr2[j] = nums[k];
}
}
for(int k = 0; k <= j; k++) {
i++;
arr1[i] = arr2[k];
}
return arr1;
}
沒有留言:
張貼留言