代码随想录算法训练营day26

题目:39_组合总数(没看题解)

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

  • 所有数字(包括 target)都是正整数。
  • 解集不能包含重复的组合。

示例 1:

  • 输入:candidates = [2,3,6,7], target = 7,
  • 所求解集为: [ [7], [2,2,3] ]

示例 2:

  • 输入:candidates = [2,3,5], target = 8,
  • 所求解集为: [ [2,2,2,2], [2,3,3], [3,5] ]

#​​​​​​​s

算法思想:

这个回溯其他地方都是一样的,只要注意递归返回的条件;

还有允许使用重复 candidate,但是结果集中,必须至少有一个数不相同,因此startindex 的值为当前处理元素,往后遍历。

代码:

import java.util.ArrayList;
import java.util.List;class Solution {List<Integer> path = new ArrayList<>();List<List<Integer>> ans = new ArrayList<>();void backtracking(int[] candidates, int target, int startindex){int sum = 0;for (int i = 0; i < path.size(); i++) {sum += path.get(i);}//递归终止条件if(sum>target) return;if(sum==target){ans.add(new ArrayList<>(path));return;}//回溯for循环for(int i = startindex;i< candidates.length;i++){path.add(candidates[i]);backtracking(candidates,target,i);   //注意这里传递的startindex,就是从当前加入的值,往后path.remove(path.size()-1);}}public List<List<Integer>> combinationSum(int[] candidates, int target) {backtracking(candidates,target,0);return ans;}
}

题目:40_组合总数2(看了题解)

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用一次。

说明: 所有数字(包括目标数)都是正整数。解集不能包含重复的组合。

  • 示例 1:
  • 输入: candidates = [10,1,2,7,6,1,5], target = 8,
  • 所求解集为:
[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]
]
  • 示例 2:
  • 输入: candidates = [2,5,2,1,2], target = 5,
  • 所求解集为:
[[1,2,2],[5]
]

#

算法思想:

注意这题题目特点,数组中有重复元素,但解集中不能包含重复的组合。需要去重。

回溯前先将数组排序,使数组递增有序,那么相同原声在相邻位置,同一个元素第一次出现时,就获得了包含它的所有组合,之后再出现时,如果再处理获得的就是重复组合。比如[1 , , 2],获得[1, 2],如果再对 1 处理,获得[1 ,2 ]重复。

因此需要进行去重操作。

if(i>=1&&candidates[i-1]==candidates[i]&&used[i-1]==false)continue;;

每次path添加元素时,把used置为true;退出回溯时,置为false。那么枝上访问1,再访问 1,都为true,可以访问;层间 访问 1 的时候,1 回溯时改为了false,直接跳过。

代码:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;class Solution {List<Integer> path =  new ArrayList<>();List<List<Integer>> ans = new ArrayList<>();//回溯法public void backtracking(int[] candidates, int target, int startindex ,boolean[] used){int sum = 0;for (int i = 0; i < path.size(); i++) {sum += path.get(i);}//递归终止if(sum>target) return;if(sum == target) {ans.add(new ArrayList<>(path));return;}//回溯for循环for (int i = startindex; i < candidates.length; i++) {//减枝操作,若在同一层candidates[i-1]==candidates[i],则跳过该结点if(i>=1&&candidates[i-1]==candidates[i]&&used[i-1]==false)continue;;path.add(candidates[i]);used[i]=true;backtracking(candidates,target,i+1,used);path.remove(path.size()-1);used[i]=false;}}public List<List<Integer>> combinationSum2(int[] candidates, int target) {boolean[]  used = new boolean[candidates.length];ArrayList<Integer> list = new ArrayList<>();for (int i = 0; i < candidates.length; i++) {list.add(candidates[i]);}//给原数组排序list.sort(new Comparator(){@Overridepublic int compare(Object o1, Object o2) {return (Integer) o1-(Integer) o2;}});for (int i = 0; i < list.size(); i++) {candidates[i]=list.get(i);}backtracking(candidates,target,0,used);return ans;}}

题目:131_分割回文串(看了题解)

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。

返回 s 所有可能的分割方案。

示例: 输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]

#

算法思想:

用回溯法,分割出每一个子块,startindex 表示块首位置,i 表示块尾位置。满足回文串加入结果,不满足则 i++, 继续下一个 for 循环。startindex >= s.length 表示到字符串末尾,返回。

代码:

判断是否为回文串,双指针

//判断是否是回文串private boolean isPalindrome(String s, int startIndex, int end) {for (int i = startIndex, j = end; i < j; i++, j--) {if (s.charAt(i) != s.charAt(j)) {return false;}}return true;}

回溯法,分割字符串

List<List<String>> lists = new ArrayList<>();List<String> str = new LinkedList<>();public List<List<String>> partition(String s) {backtracking(s, 0);return lists;}public void backtracking(String s, int startindex){//递归终止条件//startindex >= s.length 表示切完了整个字符串返回if(startindex>=s.length()){lists.add(new ArrayList<>(str));return;}//层间遍历for(int i =startindex ;i<s.length();i++){if(isPalindrome(s,startindex,i)){String temp = s.substring(startindex,i+1);str.add(temp);}else{continue;}backtracking(s,i+1);str.remove(str.size()-1);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2810215.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot中实现列表数据导出为Excel文件

点击下载《Spring Boot中实现列表数据导出为Excel文件》 1. 前言 本文将详细介绍在Spring Boot框架中如何将列表数据导出为Excel文件。我们将通过Apache POI库来实现这一功能&#xff0c;并解释其背后的原理、提供完整的流程和步骤&#xff0c;以及带有详细注释的代码示例。最…

Sora领航AIGC时代:深度解读行业变革与AI工具全景图

随着人工智能技术的飞速发展&#xff0c;越来越多的企业和行业开始将AI融入其核心业务流程中。在这个背景下&#xff0c;Sora以其独特的视角和全面的解决方案&#xff0c;正引领着AIGC&#xff08;人工智能生成内容&#xff09;的趋势变革。 本文将对Sora进行深度解读&#xf…

【Python时序预测系列】时序数据采样间隔不规律的解决方案(案例)

一、引言 在做时序数据相关任务时候&#xff0c;会遇到采样的间隔不规律的情况&#xff0c;比如采样周期为月&#xff0c;但是有的月份应该种种原因未能成功采样&#xff0c;如下&#xff1a; 这时候运用统计模型进行时序分析的时候往往会出现问题&#xff0c;所以我们需要构造…

原型模式(Prototype Pattern) C++

上一节&#xff1a;建造者模式&#xff08;Builder Pattern&#xff09;C 文章目录 0.理论1.原型模式的核心组成&#xff1a;2.实现方法3.什么时候使用 1.实践步骤 1: 定义怪物原型步骤 2: 实现具体怪物原型步骤 3: 使用原型创建怪物 0.理论 原型模式&#xff08;Prototype P…

力扣随笔删除有序数组中的重复项(简单26)

思路&#xff1a;根据类似于滑动窗口的思想&#xff0c;定义一个指针&#xff1b;使指针左边的区域全部为不重复元素&#xff08;包括指针所指的数字&#xff09; 以示例2为例&#xff0c;left&#xff1a;红色加粗 遍历指针i&#xff1a;黑色加粗 窗口范围&#xff0c;左边界到…

C++笔记(面对对象部分复习向)

B站&#xff1a;黑马程序员C教程 栈区&#xff0c;全局区&#xff0c;堆区和代码区 析构、构造和static 对象成员与类本身构造顺序&#xff0c;先成员后自己&#xff1b;析构则相反 static修饰成员变量,所有对象共享一份内存&#xff0c;编译阶段分配内存&#xff0c;类内声明…

[c++] char * 和 std::string

1 char * 和 std::string 的区别 char * 字符串是常量字符串&#xff0c;不能修改&#xff1b;std::string 指向的字符串可以修改 实例代码如下图所示&#xff0c;s1 和 s2 均是常量字符串&#xff0c;字符串常量保存在只读数据区&#xff0c;是只读的&#xff0c;不能写&…

Aigtek高压放大器是什么东西做的

在许多电子应用中&#xff0c;需要将低电压信号放大到较高电压以满足特定的需求。为了实现这个目标&#xff0c;高压放大器被广泛采用。高压放大器是一种专用电子设备&#xff0c;使用特定的电路和器件来增益输入信号的电压。它通常由以下几个主要组成部分构成。 电源供应 高压…

C# Onnx yolov8-obb 旋转目标检测

目录 效果 模型信息 项目 代码 下载 C# Onnx Yolov8-OBB 旋转目标检测 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-02-26T08:38:44.171849 description&#xff1a;Ultralytics YOLOv8s-obb model trained on runs/DOTAv1.0-ms.ya…

TextCNN:文本分类卷积神经网络

模型原理 1、前言2、模型结构3、示例3.1、词向量层3.2、卷积层3.3、最大池化层3.4、Fully Connected层 4、总结 1、前言 TextCNN 来源于《Convolutional Neural Networks for Sentence Classification》发表于2014年&#xff0c;是一个经典的模型&#xff0c;Yoon Kim将卷积神…

B站UP视频播放数据分析之然冉创业说

【背景介绍】 几年前做过类似的分析&#xff0c;但是B站数据加密了&#xff0c;刚好最近在用selenium&#xff0c;就顺手用它爬一下数据。 df pd.read_excel("然冉创业说_13.2万_output.xlsx") df.head() 以上数据在视频播放页面就可以获取到。 【数据分析】 从数…

sqli-labs(less-46)order by 注入

我们打开sql-labs的第46关然后在输入框内输入?id1时会发现页面没有任何的变化&#xff0c;此时我们用Visual Studio Code查看第46关的代码 此时我们发现sql语句是$sql "SELECT * FROM users ORDER BY $id"; &#xff0c;所以现在我们需要了解一下order by语句的作…

Helm vs Kustomize 深度比较

Helm和Kustomize都是流行的Kubernetes集群部署管理工具&#xff0c;本文比较了两者的优缺点&#xff0c;方便读者根据项目实际情况采用适合的方案。原文: Helm vs Kustomize: why, when, and how[1] 挑战 开始讨论之前&#xff0c;先来看看为什么要使用 Helm 或 Kustomize。 这…

AI数字人SadTalker实战

1.概述 AI数字人在营销和品牌推广中扮演着至关重要的角色&#xff0c;许多企业和个人正积极利用数字技术来打造属于自己的财富。有没有一种简单而免费的方式来创建自己的数字人呢&#xff1f;本篇博客笔者将为大家介绍如何搭建属于自己的AI数字人。 2.内容 2.1 什么是SadTalker…

Windows部署WebDAV服务并映射到本地盘符实现公网访问本地存储文件

文章目录 前言1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 安装cpolar内网穿透3.2 配置WebDav公网访问地址 4. 映射本地盘符访问 前言 在Windows上如何搭建WebDav&#xff0c;并且结合cpolar的内网穿透工具实现在公网访…

【DL】深度学习之语音识别

目录 1 核心概念 2 安装依赖库 3 实践 语音信号处理&#xff08;Speech Signal Processing&#xff09;简称语音处理。 语音识别&#xff08;ASR&#xff09;和自然语言处理&#xff08;NLP&#xff09;&#xff1a;语音识别就是将语音信号转化成文字文本&#xff0c;简单实…

解决启动服务报./nginx -s reload nginx: [emerg] unknown directive “错误

重启服务报错 bug: ./nginx -s reload nginx: [emerg] unknown directive "? 原因&#xff1a; 一、可能打开没有关闭 二、刚刚编辑的没成功&#xff0c;乱码了&#xff0c;格式问题&#xff0c;重新配置

汇标网系统搭建,让知识产权保护更智能、更便捷!

据国家商标局统计发布&#xff0c;2023年四季度我国商标申请量达到了6,988,704件&#xff0c;有效商标注册量为44,047,071件&#xff01; 商标作为企业的重要资产&#xff0c;现在不仅企业、个体户、个人等等&#xff0c;都想在商标市场分得一杯羹。 目前&#xff0c;国家和社会…

多模态表征中的里程碑—CLIP及中文版Chinese-CLIP:理论揭秘、代码微调与论文阅读 (视觉与语义的奇妙共舞~)

我之前一直在使用CLIP/Chinese-CLIP&#xff0c;但并未进行过系统的疏导。这次正好可以详细解释一下。相比于CLIP模型&#xff0c;Chinese-CLIP更适合我们的应用和微调&#xff0c;因为原始的CLIP模型只支持英文&#xff0c;对于我们的中文应用来说不够友好。Chinese-CLIP很好地…

【深度学习笔记】深度学习训练技巧

深度学习训练技巧 1 优化器 随机梯度下降及动量 随机梯度下降算法对每批数据 ( X ( i ) , t ( i ) ) (X^{(i)},t^{(i)}) (X(i),t(i)) 进行优化 g ∇ θ J ( θ ; x ( i ) , t ( i ) ) θ θ − η g g\nabla_\theta J(\theta;x^{(i)},t^{(i)})\\ \theta \theta -\eta g g…