1. 程式人生 > 其它 >8月10日 leetcode 88、94

8月10日 leetcode 88、94

88. 合併兩個有序陣列(simple)

給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為一個有序陣列。

初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。你可以假設 nums1 的空間大小等於 m + n,這樣它就有足夠的空間儲存來自 nums2 的元素。

示例 1:

輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
輸出:[1,2,2,3,5,6]
示例 2:

輸入:nums1 = [1], m = 1, nums2 = [], n = 0
輸出:[1]

提示:

nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[i] <= 109

錯誤的想法:
設定一個count計數,比較nums1{count]和nums[0] 大小,然後插入nums1並且在nums2中擦除資料。
錯誤原因:無法判定邊界條件。

方法一:直接合並後排序演算法
最直觀的方法是先將陣列 nums2放進陣列 nums1的尾部,然後直接對整個陣列進行排序。

方法二:雙指標演算法
方法一沒有利用陣列 nums 1與 nums 2已經被排序的性質。為了利用這一性質,我們可以使用雙指標方法。這一方法將兩個陣列看作佇列,每次從兩個陣列頭部取出比較小的數字放到結果中。

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        for (int i = 0; i != n; ++i) {
            nums1[m + i] = nums2[i];
        }
        sort(nums1.begin(), nums1.end());
    }
};

94. 二叉樹的中序遍歷(simple)

給定一個二叉樹的根節點 root ,返回它的 中序

遍歷。

示例 1:

輸入:root = [1,null,2,3]
輸出:[1,3,2]

示例 2:
輸入:root = []
輸出:[]

示例 3:
輸入:root = [1]
輸出:[1]

示例 4:

輸入:root = [1,2]
輸出:[2,1]

示例 5:
輸入:root = [1,null,2]
輸出:[1,2]

提示:
樹中節點數目在範圍 [0, 100] 內
-100 <= Node.val <= 100

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
//非遞迴演算法
#include <stack>
class Solution {
public:
    vector<int> a;
    vector<int> inorderTraversal(TreeNode* root) {
        stack<TreeNode*> s;
        TreeNode * cur=root;
        while(cur || !s.empty())
        {
            while(cur)
            {
                s.push(cur);
                cur=cur->left;
            }
            cur=s.top();
            s.pop();
            a.push_back(cur->val);
            cur=cur->right;
        }
        return a;
    }
};

本文來自部落格園,作者:ahrismile,轉載請註明原文連結:https://www.cnblogs.com/ahrismile/p/15123256.html