当前位置: 首页 > article >正文

数组总和 (leetcode 40

leetcode系列

文章目录

  • 一、核心操作
  • 二、外层配合操作
  • 三、核心模式代码
  • 总结


去重方式和之前三数之和一样,也可以用used数组去重,但本次尝试使用set去重

一、核心操作

  1. 如果count为0了,则证明正好减到了0,就可以收获,并返回
  2. 建立unordered_set
  3. 开始循环,如果在set中能够搜寻到当前的数字,说明已经重复了,则直接进行下一次的循环,如果没有找到,则说明这是一个没有重复的新数字,将其加入set中,后面则直接进行常规操作

提示:小白个人理解,如有错误敬请谅解!

二、外层配合操作

  1. 对数组进行排序

三、核心模式代码

代码如下:

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    void backTracking(vector<int>& candi, int count, int startIndex)
    {
        if(count==0)
        {
            res.push_back(path);
            return;
        }
        unordered_set<int> uset;
        for(int i=startIndex;i<candi.size()&&(count-candi[i])>=0;i++)
        {
            if(uset.find(candi[i])!=uset.end())continue;
            uset.insert(candi[i]);
            path.push_back(candi[i]);
            backTracking(candi,count-candi[i],i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        if(!candidates.size())return res;
        sort(candidates.begin(),candidates.end());
        backTracking(candidates,target,0);
        return res;
    }
};

总结

  1. 用哈希表的时间复杂度比较高,所以更常用的还是used数组或者直接用startIndex进行去重,最后在for循环条件判断的时候,一定要进行提前预判,只有count减去当前值大于等于0才继续进行循环,不进行提前预判剪枝的话会超时

http://www.kler.cn/a/583024.html

相关文章:

  • css 知识点整理
  • Qt 数据库操作(Sqlite)
  • Java虚拟机之垃圾收集(一)
  • idea超级AI插件,让 AI 为 Java 工程师
  • 基于PyTorch的深度学习6——可视化工具Tensorboard
  • 无人机第三方安全风险评估技术详解
  • 从0开始的操作系统手搓教程45——实现exec
  • 从零到一:如何系统化封装并发布 React 组件库到 npm
  • C# WPF 基础知识学习(二)
  • 二进制安装指定版本的MariaDBv10.11.6
  • 子母钟系统,京准电子科技助力高考精准计时
  • Django REST Framework 中 ModelViewSet 的接口方法及参数详解,继承的方法和核心类方法,常用查询方法接口
  • 多模态推理模型相关开源工作
  • STM32使用EXTI触发进行软件消抖(更新中)
  • C# AOT生成的hellowwordEXE运行占用多少内存1-5MB?
  • ESP8266远端可变的UDP传输
  • Java高频面试之集合-09
  • IDEA修改项目的JDK版本(无缝切换8和11)
  • 前端发布缓存导致白屏解决方案
  • SpringBoot实现文件上传