力扣刷题day2

8.26 刷题第二天

94. 二叉树的中序遍历

在这里插入图片描述

/**
 * 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) {}
 * };
 */
class Solution {
public:
    void inorder(TreeNode* root,vector<int> &res){
        if(root==nullptr){
            return;
        }
        inorder(root->left,res);
        res.push_back(root->val);
        inorder(root->right,res);
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res = vector<int>();
        inorder(root,res);
        return res;

    }
};
1) Vector

vector(向量)是一个封装了动态大小数组的顺序容器。能够存放各种类型的对象(注:一个容器中所有对象必须是同一种类型的)。可认为vector是一个能够存放任意类型的动态数组,可添加和删除数据(因为动态,所以相比数组节省空间)。

//创建vector
vector<int> v1;
//增加vector
v1.push_back(20);
//向量中迭代器指向元素前增加一个元素x
v1.insert(v1.begin() + 1, 5);
//删除向量中迭代器指向元素
v1.erase(v1.end() - 1);
//删除向量中[first, last)中元素
v1.erase(v1.begin() + 1, v1.end() - 1);
//删除向量中最后一个元素
v1.pop_back(); 
//清空
v1.clear(); 
//访问
int a = v1.at(2);
//遍历
for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
		cout << *it << " ";
	}

C++ vector的常见用法详解(超详细)(o)/~
C++ vector的用法文档
C++中vector的用法详解

0.5h

101. 对称二叉树

在这里插入图片描述
在这里插入图片描述

/**
 * 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) {}
 * };
 */
class Solution {
public:
    bool check(TreeNode* r1, TreeNode* r2){
        if(!r1 && !r2) return true;
        if(!r1 || !r2) return false;
        return r1->val==r2->val && check(r1->left,r2->right) && check(r1->right,r2->left);
    }
    bool isSymmetric(TreeNode* root) {

        return check(root->left,root->right);

    }
};

思路:拆成递归问题 两个移动节点 注意二叉树需要存储值时只关注对应节点及下一步节点转移,不需要考虑上下节点返回值问题。二叉树对称对比时,需要考虑整体的正确与否,所以需要绑定上下节点的布尔返回值。

return r1->val==r2->val && check(r1->left,r2->right) && check(r1->right,r2->left); 

0.5h

104. 二叉树的最大深度

在这里插入图片描述

/**
 * 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) {}
 * };
 */
class Solution {
public:
    int dfs(TreeNode* root){
        if (root==nullptr){
            return 0;
        }
        return max(dfs(root->left),dfs(root->right))+1;

    }
    int maxDepth(TreeNode* root) {
        return dfs(root);

    }
};

思路:dfs

0.3h

121. 买卖股票的最佳时机

在这里插入图片描述

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int min=*prices.begin();
        int cha=0;
        int temp=*prices.begin();
        for(vector<int>::iterator it=prices.begin()+1;it!=prices.end();it++){
            if(*it>temp){
                if(*it-min>cha){
                    cha=*it-min;
                }
            }else{
                if(*it<min){
                    min=*it;
                }
            }
            temp=*it;
        }
        return cha;

    }
};

活用 max() min() for(int price: prices)
0.4h

136. 只出现一次的数字

在这里插入图片描述

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int temp=0;
        for(int n:nums){
            temp=temp^n;
        }
        return temp;
    }
};

思路:异或
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值