置頂

我的 VPython 教學文件 (HackMD 版本)

VPython 教學文件目錄 安裝及測試 基本語法 等速度直線運動 自由落下 終端速度 水平抛射 使用For迴圈計算水平抛射資料 斜向抛射 圓周運動 簡諧運動 單擺 木塊彈簧系統分離 重力及簡諧 行星運動 相疊木塊 雙重簡諧運動 一維彈性碰撞 ...

熱門文章

2026年8月20日 星期四

LeetCode 解題筆記:3069. Distribute Elements Into Two Arrays I

作者:王一哲
日期: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;
}


沒有留言:

張貼留言