代码随想录算法训练营:23/60

用Keil5给CH552G编程:手把手配置8051开发环境+LED闪烁实战 本文详细介绍了如何使用Keil5为CH552G单片机配置8051开发环境,并完成LED闪烁实战。从获取必要软件、安装WCH器件库到创建工程、编写程序及烧录,手把手指导开发者避开常见陷阱,特别适合从STC转向CH552G的开发者。 阅读详情

非科班学习算法day23 | LeetCode39:组合总和 ,Leetcode40:组合总和|| 


介绍

包含LC的两道题目,还有相应概念的补充。

相关图解和更多版本:

代码随想录 (programmercarl.com)https://programmercarl.com/#%E6%9C%AC%E7%AB%99%E8%83%8C%E6%99%AF


一、LeetCode题目

1.LeetCode39:组合总和 

题目链接:39. 组合总和 - 力扣(LeetCode)

题目解析

       明确问题需求,组合:没有顺序要求,可以有重复;总和:中止条件,剪枝条件。

这里和之前题目最大的区别就是可以重复,也就是说可以从头开始,所以注意递归的参数是i

        还有一个问题就是需不需要index,实际上是需要的,因为index可以帮助我们取寻找在一个数组中当前寻找元素的位置,比如说,一开始找的是0位,进入递归,下一层还是会从0开始选取;下一个for里面i已经++了,所以进入到1位的分支,以上这句话也可以增加对回溯的理解。

 c++代码如下:

class Solution {
public:
    // 路径
    vector<int> path;
    // 结果
    vector<vector<int>> res;
    // 回溯函数-重复选取
    void backtracking(vector<int>& candidates, int target, int index, int sum) {
        if (sum > target)
            return;
        // 中止,收集结果
        if (sum == target) {
            res.push_back(path);
            return;
        }

        for (int i = index; i < candidates.size(); i++) {
            path.push_back(candidates[i]);
            sum += candidates[i];
            backtracking(candidates, target, i, sum);
            path.pop_back();
            sum -= candidates[i];
        }
    }
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        backtracking(candidates, target, 0, 0);
        return res;
    }
};

 2.Leetcode40:组合总和|| 

题目链接:40. 组合总和 II - 力扣(LeetCode)

题目解析

       这里有一个和前面不同的区别就是数组中有重复的数字,结果res里面的路径之间要求不可以相同,比如[1,1,1]没有问题,但是res里有两个[1,1,1]就不可以了。

        明确了这个需求我们可以根据抽象的树状图分析出来,递归过程其实并没有影响,因为检索过程没有变,但是如果想去重就要把在树层上下功夫。这里没有采用used辅助,可以想象一下,什么能造成重复,前提是将数组排序,如果相邻两个数是一样的,因为我们for是从左到右遍历,那么后面的数构成的结果一定包含在前面的数里。

 C++代码如下: 

class Solution {
public:
    // 路径
    vector<int> path;
    // 结果
    vector<vector<int>> res;
    // 回溯函数-有重复数字且同一位不可重复选取
    void backtracking(vector<int>& candidates, int target, int sum, int index) {
        if (sum > target)
            return;
        // 收集结果
        if (sum == target) {
            res.push_back(path);
            return;
        }

        for (int i = index; i < candidates.size(); ++i) {
            if (i > index && candidates[i] == candidates[i - 1])
                continue;
            path.push_back(candidates[i]);
            sum += candidates[i];
            backtracking(candidates, target, sum, i + 1);
            path.pop_back();
            sum -= candidates[i];
        }
    }
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        sort(candidates.begin(), candidates.end());
        backtracking(candidates, target, 0, 0);
        return res;
    }
};

注意点:其他地方都没有问题,只需要注意去重大多数是要重新排序的,除非说有序返回!

总结


打卡第23天,坚持!!!

【原创】下载RealEstate10K数据集原始视频的方法 目前互联网上能搜到下载RealEstate10K数据集原始视频的方法都已经不能用了,这篇博客介绍一种目前可用的下载RealEstate10K数据集原始视频的方法,并给出自动化的脚本代码。 阅读详情

相关推荐

安卓集成华为HMS Scankit实现自定义扫码功能

实现扫码功能 使用的是集成华为扫描的SDK,UI界面借鉴的是谷歌官方的Zxing项目中的自定义view,两者结合实现。 先上效果图: 先在项目根级别(build.gradle)当中配置HMS Core SDK的Maven仓地址。 // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huawei.com/repo/'} // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huaw

qq_47625961的博客 5510

网站收藏箱

文章内容都是笔者日常工作与学习接触到,并且觉得不错的网站,特收录在册,欢迎广大读者提供补充,文章会持续更新

沉梦听雨的博客 1万+

雷达回波仿真

文章目录前言一、基础理解1.慢时间维度和快时间维度2.脉冲压缩3.MTI4. 脉冲多普勒处理5.cacfar检测二、具体流程1.产生回波信息加入目标时延以及噪声2.解调回波得到基带信号3.脉冲压缩 MTI MTD cafar检测 前言 雷达算法仿真学习,主要流程包括生成目标回波,将基带信号加在载波上其次是加上目标信息和干扰信号后发射,解调回波信号得到基带信号然后MTI,MTD,最后再检测。 一、基础理解 1.慢时间维度和快时间维度 连续M个脉冲回波经过相干解调之后的基带数据形成的一个二维数据矩阵,.

qq_42961235的博客 1万+

算法速成之代码随想录

有些同学想要学习算法题,但是时间很紧,自己的基础也不是很好,想要在空余时间完全掌握所有算法题确实有点不切实际了,终于去学习了遇到难题又半途而废,于是我总结了一下刷代码随想录题目的方法先看b站视频:BV1fA4y1o715,有规划的看,每一类题可以看一到两道,看完去做题,感觉基本了解了就可以直接看代码随录博客的题目跟着做,因为看视频较为费时间,博客中的注释非常详细;写题时候,,实在无从下手就他的,看完应该都能自己写了,如果连思路都看不懂,那么就求助gpt或者去看他的视频;每周写题也要有一定的规划,

qq_63728673的博客 7031

深度学习与神经网络有什么区别

人工神经网络(ArtificialNeuralNetwork,即ANN)是从信息处理角度对人脑神经元网络进行抽象,是20世纪80年代以来人工智能领域兴起的研究热点,其本质是一种运算模型,由大量的节点(或称神经元)之间相互联接构成,在模式识别、智能机器人、自动控制、生物、医学、经济等领域已成功地解决了许多现代计算机难以解决的实际问题,表现出了良好的智能特性。...

super67269的博客 8488

AI气象预报:数值模式融合与短临预警的工程实践

气象预报正经历从物理推演到数据驱动的认知范式转变。AI气象预报并非替代传统数值模式,而是通过数值模式融合弥补其在参数化误差、初值敏感性和计算效率上的固有瓶颈。其技术价值在于提升短临预警时效性与空间精度,支撑航空调度、电力调控、防洪应急等关键场景。实践中需兼顾物理一致性、可解释性与业务系统兼容性,避免纯黑箱建模带来的外推失效与不确定性缺失风险。本文聚焦AI作为超分辨率引擎、误差矫正器和短临加速器的三类落地路径,解析HEALPix投影、多尺度图建模、轻量级U-Net等核心适配方法。

weixin_28221501的博客 298

代码随想录刷题笔记 (python版本) 持续更新.....

代码随想录刷题笔记

hello world 1万+

手把手教你学Simulink——基于新型电力电子拓扑与宽禁带器件的电网系统场景实例:GaN HEMT器件在高频逆变器中的开关特性建模

本文介绍了基于Simulink和Simscape Electrical的GaN HEMT高频逆变器建模方法。通过构建半桥拓扑电路,详细说明了GaN器件参数设置(以EPC2045为例)、专用驱动电路设计(含负压关断和米勒钳位)以及开关瞬态过程仿真(配置1ns步长捕捉MHz级特性)。重点分析了开关损耗计算和寄生导通风险,并对比了GaN与Si MOSFET的性能差异。案例展示了如何优化驱动参数和PCB布局,验证了GaN器件在1MHz高频应用中的优势(开关损耗仅5μJ)。最后总结了GaN在数据中心电源、无线充电等领

MHD0815的博客 403

代码随想录|学习工具分享

遇到看不懂的方法的时候(C++),可能是宏定义, 方法本身就是一个 宏定义,所以要找到定义他的地方,这种项目的代码 估计宏定义满天飞,如果没有好的文档,代码很难看自增自减运算符只能用于变量;不能用于常量和表达式。在使用map容器存储多个键值对时,容器会自动根据键值对的键大小,按照既定的规则进行排序(默认升序,可以自定义)使用map存储的键值对,键既不能重复也不能修改multimap和map的区别在于multimap容器可以同时存储多个键相同的键值对。

2303_79299383的博客 8703

图形推理2-四大类六提示

图形推理笔记2

小y的学习笔记 6740

第4节:cesium 0基础发布离线地图(含源码+视频)

cesium发布离线地图

qq_29384639的博客 1595

代码随想录刷题汇总

网站:https://www.programmercarl.com/

不思考会变草履虫哦 7263

在 Zynq 7010 上运行 VxWorks 7.0 的详细流程【持续更新】

本文介绍了在Zynq 7010开发板上运行VxWorks 7.0的完整流程。主要包括:1)使用Vivado创建硬件设计,配置Zynq模块并生成比特流文件;2)通过Workbench 4创建VxWorks工程,配置启动参数并生成镜像;3)下载运行步骤。此外还讲解了使用Workbench 4开发VSB和VIP工程的方法,包括工程创建、配置和调试流程。文中提供了关键操作截图和注意事项,为开发者提供了完整的Zynq 7010平台VxWorks开发解决方案。

weixin_45397344的博客 1223

代码随想录-算法训练营day60(单调栈03:柱状图中最大的矩形)

单调栈03:数组中的最大矩形

weixin_61931006的博客 675

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

代码随想录算法训练营第23期60天完结总结

每天刷题的感觉,从数组链表的没啥难度,到字符串栈的巩固提升,二叉树是崩溃的第一步,以前只理解前中后序都是怎么一回事,但是真的没了解过代码是怎么一回事。回溯接踵而来,排列组合的问题有了思路(作为一个数学生,下意识的用最好理解的组合数,结果发现有更偏算法的AC办法),剪枝优化却任重而道远;60填的训练营虽然要结束了,走到却并不意味着代码征途的结束,当初报训练营的时候,是想着有一个督促作用。从这一点来讲,其实还是做到了的。不过这远远不够,不仅是对算法的掌握,还是马上到来的毕业论文里的编程,都还需要不断精进自己。

weixin_42179093的博客 360

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

代码随想录系统性一刷总结

指针思想很重要day01 二分查找+移除元素day02 数组平方+长度最小子数组+螺旋矩阵II。

qq_44072579的博客 1048

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

代码随想录总结篇章

历时两个月60天的代码随想录结束了,本次一刷leetcode收获很多,将经典题目都刷了一遍,感觉到自己的代码能力有显著提升,感谢老师们每天的提醒,原来想着两个月坚持下来是件难事,但坚持下来后发现也没有那么难,日积月累收获良多,下面是各题型总结:来源于同期录友:代码随想录算法训练营总结-优快云博客 来源于同期录友:代码随想录算法训练营总结-优快云博客

qq_60959261的博客 1098

代码随想录Day23

216.组合总和III60天训练营打卡计划Day23学习内容:216.组合总和III17.电话号码的字母组合。

2301_81634068的博客 257

代码随想录-算法训练营day60【单调栈03:柱状图中最大的矩形】

代码随想录-算法训练营day60【单调栈03:柱状图中最大的矩形】

upward 634

代码随想录算法训练营19期第23天

二叉搜索树

u013003382的博客 160

22.代码随想录算法训练营第二十二天|77. 组合,216. 组合总和 III,17. 电话号码的字母组合

力扣算法和代码随想录

LXY999222的博客 785

代码随想录总结|60天代码随想录训练结束(图论没开)

从二分查找到链表到二叉树,从贪心到动归再到单调栈,大二的时候也把王卓老师的40小时看完,但是现在确实学的比以前深入,打破了我的信息茧房,也知道了自己的渺小,自己的无知。5.有时候你觉得你跟题解写的差不多,然后上交不通过,那大概率可能就是你那边出问题了,第一种可能就是语法语句,第二种是定义问题,第三种还有可能是循环变量问题,第四种就是你执行结束后返回的问题,有一系列问题,你自己找吧😎👉🕶😭。我因为腰痛,我也不敢坐着太长时间,而且学校上课也是坐着,这样就更加降低我的效率。3.卡哥,确实讲的不错。

2401_83080774的博客 667

_22LeetCode代码随想录算法训练营第二十二天-回溯算法 | 216.组合总和III、17.电话号码的字母组合

_22LeetCode代码随想录算法训练营第二十二天-回溯算法 | 216.组合总和III、17.电话号码的字母组合

Jasmine-Lily的博客 319

算法60天-Day23:二叉搜索树!

代码随想录(截图自参考【1】) 本系列是代码随想录算法训练营的学习笔记之day23,主要记录一下刷题的过程,以及核心知识点和一些值的记录的问题。 代码随想录的资源可以看参考链接【1】。 今日知识点 二叉树基础: 二叉树中的几个关键词:结点、度、叶子结点二叉树的两种主要形式包括满二叉树和完全二叉树 满二叉树(完美二叉树) 满二叉树只有度为0和度为2的结点;在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包

qq_41387508的博客 549

代码随想录二刷——二叉树day23

一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油!

qq_43264167的博客 907

代码随想录算法训练营第23期day60|84.柱状图中最大的矩形

42接雨水 是找每个柱子左右两边第一个大于该柱子高度的柱子,而本题是找每个柱子左右两边第一个小于该柱子的柱子。本题是要找每个柱子左右两边第一个小于该柱子的柱子,所以从栈头(元素从栈头弹出)到栈底的顺序应该是从大到小的顺序。

weixin_42179093的博客 466
上一篇: 代码随想录算法训练营:22/60
下一篇: 代码随想录算法训练营:24/60
Dustin_c
博客等级 码龄3年 391粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值