腾讯精选50题—Day9题目88,89,104

腾讯精选50题—Day9题目88,89,104

  刷题的第九天~~~一定可以的!

1. 题目88 合并两个有序数组

(1) 题目描述

在这里插入图片描述

(2) 思路

  因为vector1长度完全可以放得下,那么直接从vector1的m-1位置和vector2的n-1位置比较,将大的放在vector1的m+n-1位置上即可。

(3) 题解

class Solution {
    
    
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
    
    

        int p1 = m - 1;
        int p2 = n - 1;

        int end = m + n - 1;

        while (p1 >= 0 || p2 >= 0)
        {
    
    
            if (p1 < 0)
            {
    
    
                nums1[end--] = nums2[p2--];
            }
            else if (p2 < 0)
            {
    
    
                return;
            }
            else if (nums1[p1] >= nums2[p2])
            {
    
    
                nums1[end] = nums1[p1];
                end--;
                p1--;
            }
            else {
    
    
                nums1[end] = nums2[p2];
                end--;
                p2--;
            }
        }
    }
};

结果:
在这里插入图片描述
时间复杂度: O ( m + n ) O(m+n) O(m+n)
空间复杂度: O ( 1 ) O(1) O(1)

2. 题目89 格雷编码

(1) 题目描述

在这里插入图片描述

(2) 思路

  位运算~再分析。

(3) 题解

class Solution {
    
    
public:
    vector<int> grayCode(int n) {
    
    

        vector<int> result;

        for (int i = 0; i < (1 << n); i++)
        {
    
    
            result.push_back(i ^ i >> 1);
        }
        return result;
    }
};

结果:
在这里插入图片描述

时间复杂度: O ( 2 n ) O(2^n) O(2n)
空间复杂度: O ( 1 ) O(1) O(1)

3. 题目104 二叉树深度

(1) 题目描述

在这里插入图片描述

(2) 思路

  美妙的二叉树,递归呀呀呀呀呀呀~

(3) 题解

class Solution {
    
    
public:
    int maxDepth(TreeNode* root) {
    
    
        int result = Travel(root);
        return result;
    }
    int Travel(TreeNode* root) {
    
    
        if (!root)
            return 0;
        else {
    
    
            return (max(Travel(root->left), Travel(root->right))+1);
        }
    }
};

结果:
在这里插入图片描述
时间复杂度: O ( n ) O(n) O(n) n为二叉树的结点数
空间复杂度: O ( h e i g h t ) O(height) O(height) height为二叉树的高度

猜你喜欢

转载自blog.csdn.net/Fox_Alex/article/details/112909115
今日推荐