【LeetCode】HOT 100(24)

简介: 【LeetCode】HOT 100(24)

题单介绍:

精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。


目录


题单介绍:


题目:437. 路径总和 III - 力扣(Leetcode)


题目的接口:


解题思路:


代码:


过过过过啦!!!!


题目:416. 分割等和子集 - 力扣(Leetcode)


题目的接口:


解题思路:


代码:


过过过过啦!!!!


写在最后:


题目:437. 路径总和 III - 力扣(Leetcode)


题目的接口:

/**
 * 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 pathSum(TreeNode* root, int targetSum) {
    }
};

解题思路:

这道题的做法,我就是直接使用深度优先搜索,


然后通过rootSum函数查找路径和,


通过重复调用pathSum自身来查找不同根节点的路径和,


核心在于通过每次调用rootSum的时候减少targetSum的方式完成路径求和。


代码如下:


代码:

/**
 * 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:
    long pathSum(TreeNode* root, long targetSum) {
        if(root == nullptr) return 0;
        long ret = rootSum(root, targetSum);
        ret += pathSum(root->left, targetSum);
        ret += pathSum(root->right, targetSum);
        return ret;
    }
private:
    long rootSum(TreeNode* root, long targetSum) {
        if(root == nullptr) return 0;
        long ret = 0;
        if(root->val == targetSum) ret++;
        ret += rootSum(root->left, targetSum - root->val);
        ret += rootSum(root->right, targetSum - root->val);
        return ret;
    }
};


过过过过啦!!!!


题目:416. 分割等和子集 - 力扣(Leetcode)


题目的接口:

class Solution {
public:
    bool canPartition(vector& nums) {
    }
};

解题思路:

这道题的正统解法应该是动态规划,


但是我不会动态规划,然后我就在讨论区看到了一个另类的解法,


具体思路是这样的:


因为是分成两个子集,且都是整数,所以他们的和其实就是总和的一半,


把所有相加的情况都跟总和的一半作比较,然后就能得出能否分成两个子集了,


代码如下:


代码:

class Solution {
public:
    bool canPartition(vector& nums) {
        int sum = 0;
        for(auto e : nums) sum += e;
        if(sum % 2 != 0) return false;
        int target = sum / 2;
        set st;
        for(int i = 0; i < nums.size(); i++) {
            set snum;
            if(nums[i] == target) return true;
            if(nums[i] < target) snum.insert(nums[i]);
            for(auto num : st) {
                int tarSum = nums[i] + num;
                if(tarSum == target) return true;
                if(tarSum < target) snum.insert(tarSum);
            }
            for(auto k : snum) st.insert(k);
        }
        return false;
    }
};

过过过过啦!!!!


写在最后:

以上就是本篇文章的内容了,感谢你的阅读。


如果感到有所收获的话可以给博主点一个赞哦。



相关文章
|
3天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1307 3
|
3天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
632 3
|
4天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
|
11天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
743 5
|
7天前
|
物联网 API UED
Qwen-Image-Edit-2511来啦!角色一致性再提升,LoRA能力内置
Qwen-Image-Edit-2511发布!提升角色与多人合照一致性,集成Lora打光、新视角生成,增强工业设计与几何推理能力。已开源,支持魔搭、QwenChat免费体验,本地部署可获最佳效果。
448 3