Combination Sum II 无序数组中找组合(每个元素只能用一次)使得和为target@LeetCode@LeetCode

STM32CUBEMX配置SDRAM 阅读详情

和上一题思想一样,区别在于每个元素只能用一次,所以start的位置也要改变。

另外一个问题是如何处理返回大集合中有重复子集合的问题。最容易想到的就是用HashSet来过滤一遍,参考了http://blog.youkuaiyun.com/u011095253/article/details/9158423

的大作后发现有一种更绿色的方法,就是多用一个while循环跳过相同的元素!这个技巧在很多情况下都很好用的!


package Level4;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * Combination Sum II
 * 
 *  Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

Each number in C may only be used once in the combination.

Note:
All numbers (including target) will be positive integers.
Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
The solution set must not contain duplicate combinations.
For example, given candidate set 10,1,2,7,6,1,5 and target 8, 
A solution set is: 
[1, 7] 
[1, 2, 5] 
[2, 6] 
[1, 1, 6] 
 *
 */
public class S40 {

	public static void main(String[] args) {
		int[] num = {10,1,2,7,6,1,5};
		int target = 8;
		System.out.println(combinationSum2(num, target));
	}

	public static ArrayList<ArrayList<Integer>> combinationSum2(int[] num, int target) {
		 ArrayList<ArrayList<Integer>> ret = new  ArrayList<ArrayList<Integer>>();
		 ArrayList<Integer> al = new ArrayList<Integer>();
		 Arrays.sort(num);
		 dfs(num, target, 0, ret, al);
		 return ret;
    }
	
	public static void dfs(int[] num, int remain, int start, ArrayList<ArrayList<Integer>> ret, ArrayList<Integer> al){
		if(remain == 0){
			ret.add(new ArrayList<Integer>(al));
			return;
		}
		
		for(int i=start; i<num.length; i++){
			int rest = remain - num[i];
			if(rest < 0){
				return;
			}
			al.add(num[i]);
			dfs(num, rest, i+1, ret, al);	// 因为不能重复使用元素,所以每次用完后就跳过
			al.remove(al.size()-1);
			
			// 跳过相同的元素
			while(i<num.length-1 && num[i]==num[i+1]){
				i++;
			}
		}
	}
}


注意:

            while(i+1<num.length && num[i+1]==num[i]){
                i++;
            }

这里i只能和i+1比较,因为i是从0开始的,所以如果与i-1比较则会因为越界而无法继续比较。


public class Solution {
    public ArrayList<ArrayList<Integer>> combinationSum2(int[] num, int target) {
        ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> al = new ArrayList<Integer>();
        Arrays.sort(num);
        dfs(num, target, 0, al, ret);
        return ret;
    }
    
    public void dfs(int[] num, int target, int pos, ArrayList<Integer> al, ArrayList<ArrayList<Integer>> ret){
        if(target < 0){
            return;
        }
        if(target == 0){
            ret.add(new ArrayList<Integer>(al));
            return;
        }
        
        for(int i=pos; i<num.length; i++){
            al.add(num[i]);
            dfs(num, target-num[i], i+1, al, ret);
            al.remove(al.size()-1);
            
            while(i+1<num.length && num[i+1]==num[i]){
                i++;
            }
        }
    }
}




PyTorch实战(19)——变分自编码器(Variational Autoencoder,VAE) 变分自编码器 (Variational Autoencoder, VAE) 是一种结合了自编码器和概率建模的生成模型,通过编码器将输入数据映射到潜在空间中的概率分布,并通过解码器将从潜在空间采样得到的潜在变量映射回原始数据空间,实现了数据的生成和特征学习。本节中,将介绍变分自编码器的基本概念,并使用 PyTorch 实现变分自编码器生成新图像。 阅读详情

相关推荐

【自用】吉林大学计算机系统结构第二章:缓存优化 曲冠南老师版 笔记

容量8KB,2的十三次方,块大小16B,一块用掉四位,剩余2的九次方是标志位,则有512行,每个元素8B,则一块两个元素,a数组150块,b数组152块,不出现容量失效。不管是否交换内容,在同一“伪相联”组中的两块都是用同一个索引得到的,因此失效率相同,即:失效率伪相联=失效率2路。伪相联cache的命中时间等于直接映象cache的命中时间加上伪相联查找过程中的命中时间*该命中所需的额外开销。(6) 由编译器控制的预取,硬件预取的替代方法,在编译时加入预取的指令,在数据被用到之前发出预取请求。

weixin_73587775的博客 1616

Combination Sum 无序数组中找组合(每个元素可用多次)使得和为target@LeetCode

典型DFS package Level3; import java.util.ArrayList; import java.util.Arrays; /** * * Combination Sum * * Given a set of candidate numbers (C) and a target number (T), find all unique * co

2029

Coze知识库搭建:智能化管理与高效检索实践

知识管理系统是现代企业信息资产管理的核心基础设施,其核心原理是通过结构化存储和智能检索技术实现知识的快速流转。在技术实现上,基于NLP的语义理解引擎和知识图谱构建是关键,能够显著提升检索准确率和知识关联性。以Coze平台为例,其针对中文场景优化的分词算法和多模态处理能力,可有效解决技术文档管理中的术语识别和格式兼容问题。这类系统在开发团队知识沉淀、新员工培训等场景中价值显著,特别是当集成RBAC权限模型和自动化备份策略后,既能保障信息安全,又能实现持续的知识迭代。通过合理配置同义词扩展和权重调整,可使搜索命

weixin_29041195的博客 262

一个无序数组中两个数之和等于给定的值sum

【问题描述】 给定一个数组,求两个数之和=给定值sum的所有组合个数。 【变形】两个数之和=sum的任意一组数 【方法一】穷举法 从数组中任意找两个数,看其和是否=sum。时间复杂度O(N^2) 【方法二】先排序,然后定义两个指针,一个i=0指向数组头,一个j=len-1指向数组的尾,看其和是否==sum;若==,则查找成功返回;若>sum,则尾指针j--;若 时间复杂

suibianshen2012的专栏 1万+

【Proteus仿真】基于74LS148+74LS279+74LS48的四路抢答器

【Proteus仿真】基于74LS148+74LS279+74LS48的四路抢答器

perseverance51博客 8833

路径规划 | 图解Informed RRT*算法(附ROS C++/Python/Matlab仿真)

Informed RRT*算法针对RRT*算法进行了采样优化,用椭圆采样代替全局均匀采样,避免了RRT*算法搜索树上产生过多冗余分支的缺陷。本文图解Informed RRT*原理,并提供ROS C++/Python/Matlab三种实现加深理解

FRIGIDWINTER的博客 7484

LeetCode 39. 组合总和(Combination Sum)

题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。  示例 1: 输入: candidates = [2,3,6,7], target = 7...

tan137310853的博客 167

【深度学习新浪潮】算力上太空:NVIDIA Space-1 Vera Rubin Module 深度技术解析

NVIDIA Space-1 Vera Rubin Module 不只是一款芯片模组,它是天地一体化 AI 的基础设施底座。它用成熟的 GPU 架构 + 航天级加固,把地面 AI 生态直接平移到太空。下一个 AI 创新战场,不在云端,而在轨道。在轨 LLM星上多模态实时处理卫星自主组网与分布式推理太空算力成为云计算的一级节点参考资料NVIDIA 官方博客:NVIDIA 推出太空计算,将 AI 送入太空轨道GTC 2026 黄仁勋主题演讲。

专注:太空算力、AI infra、异构调度、大模型成本工程 1125

40. 组合总和 II

给定一个数组 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: 输入:

zjbzwhwhz的博客 215

剪映专业版教程:用AI生成音乐MV并重新制作画面—《漂泊与归梦》完全原创实战

本文详细拆解如何用AI生成音乐MV并重新制作画面的全流程。以歌曲《漂泊与归梦》为例,首先用AI将歌词转化为带音乐的MP4文件;导入剪映后分离音频并删除原视频,通过“识别字幕”功能提取歌词文本并逐句核对修正;接着设置“向右擦除”动画并锁定字幕轨道;最后根据歌词意境配置动漫、风景等非真人画面规避审核风险。教程涵盖从AI生成、音频分离、字幕提取到画面重制的每个环节,助你打造完全原创、无侵权风险的音乐短视频。

深耕计算机专业知识与技术。 1074

YOLO26-seg分割优化:卷积魔改 | 动态蛇形卷积(Dynamic Snake Convolution),实现暴力涨点 | ICCV2023

​​​​​​摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 217

给定一个无序数组和一个目标值,找出数组中两个数之和等于目标值的所有组合

题目: 给定一个无序数组和一个目标值,找出数组中两个数之和等于目标值的所有组合,并给出时间复杂度。 假设数组是[3,5,3,5],目标值是8。 答案是否可重复,题里没说,所以分3种情况,如下: 1.重复。答案是【0,1】【0,3】【1,2】【2,3】,序号组合,共4种组合。 解法如下: 1.1.嵌套遍历。时间复杂度:O(n^2)。 1.2.哈希法。键存数组元素值,值存出现次数。时间复杂度:O(n)。 1.3.排序+双指针夹逼。时间复杂度:O(nlogn)。 2.半重复。答案是【0,1】【2,3】,也可能是【

lewele001的博客 2015

利用baostock获取上市公司财务指标

利用baostock获取上市公司的财务指标 1、导入模块,登录baostock import baostock as bs import pandas as pd import time # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) 2、查询股票代码、行业板块 # 查询股票代码 rs=.

firefox_yau的博客 2098

(python)给定一个整数数组和一个目标值,找出数组中和为目标值的两个数--算法

1、使用最容易理解的遍历数组进行查找 def solution(nums,target): #如果列表长度小于2,则直接结束 if len(nums) &amp;lt; 2: return #两次循环列表,分别对列表中的所有可能的数字进行相加 #循环两次列表对应的时间复杂度为O(n²) for i in range(0, len(...

Hanxianzhao的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

2021-09-16-满足整数之和为target的题型总结

1. 两数之和 给定一个整数数组 nums 和 目标值 target,请你在数组中找出两个整数之和为 target 对应的数组下标 假设每种输入都只会有一个答案 nums = [ 1,1,1,1,4,5 ] ,target = 6 这种情况是不可能存在的 数组中同一个元素不能再答案中重复出现 一次for循环 + hashTable来完成 时间复杂度O(n),空间复杂度O(1) /** * @param {number[]} nums * @param {number} targe

weixin_43639930的博客 323

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

组中是否存在若干元素的组合,相加为目标值

到此还未过滤不合格组合 过滤掉不符合要求的组合就是我们所需要的 题目结果 /** * 已知一个无序数组 array,元素均为正整数。给定一个目标值 target, * 输出数组中是否存在若干元素的组合,相加为目标值。 */ let ar1r = [1, 2,3];//目标数组 /** * 返回符合要求的组合 * @param {*} nums 组合位数 值 即 几个数相加 * @param {*} forArr 目标数组 */ function forn (nums,forArr){

BLUESKYHOST的博客 458

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【leetcode】【题目小结】n数之和

1. 2数之和 无序数组,找和为target的2个数字,返回下标。 解法:hash表记录之前遇到的数字,表中不存在互补的则继续向后找。 2. 2数之和-有序数组 有序数组,找和为target的2个数字。 解法:头尾双指针 3. 在BST上的2数之和 数据用BST形式储存。 解法1:BST中序遍历输出为有序数组,做法转为2。 解法2:hash表记录已遍历内容,做法类似1。 解法3:BST上的递归,看作从中间向两端的双指针。 4. 2数之和小于target 找出和小于t...

lemonade13的博客 657

力扣打卡之两数之和【有序数组和无序数组】

力扣打卡之两数之和【有序数组与无序数组】

young_man2的博客 343

找出有序数组中和等于指定数的两个数

题目:已知按序排列的整数数组,输入任意数number,当数组中某两数之和等于number时,打印出两个数。 要求:复杂度为o(n) 解法: 数组已是有序排列,且两个加数一定满足条件:较小加数 若两数之和>number,说明较小加数还要再小,向数组的较小值方向移位取值与原较大值重新匹配。 若两数之和   1 public void seachAdden

yiwaChen的博客 2441

python--两数之和的相关题目

1.给定一个列表和一个整数,设计算法找到两个数的下标,使得两个数之和为给定的整数。保证肯定仅有一个结果。 n例:列表[1,2,5,4]与目标整数3,1+2=3,结果为(0, 1). li = [1,3,6,9,13,18,21,26,33] target = 31 # 方法一 def two_sum_1(li, target): for i in range(len(li)): ...

厚积而后薄发 280

1. Two Sum查找列表中两数加和等于特定值Python & Java

给定一个整数数组,返回两个数字的位置,以便它们加起来成为一个特定值。 假设每个输入都只有一个解决方案,并且不会两次使用同一元素。 Input: [2, 7, 11, 15],target:9 Output:[0, 1] 因为肯定会有两个数相加等于target, 并且是有序list, 所以遍历list里面的数时按顺序就可以 Method 1 两层循环遍历list 每次对第i个数字进行操作, 判断其后面的数与它相加是否等于target class Solution: def twoSum(s

weixin_44516745的博客 1956

【算法题】找到数组中和为固定值的两个元素

题目:编写一个函数,输入为一个int型的数组numbers和一个int型变量target,找到这个数组中和为target的两个元素,输出其index。 假设每组输入有且仅有一组输出 示例: Input: numbers={6, 2, 15, 7,11}, target=9 Output: index1=1, index2=2 解答: 1.查找法 两层遍历,最直观 时间复杂度:

u010515761的专栏 2633

给定一个乱序数组a,找到所有两个和为target的数组下标index1,index2

给定一个乱序数组a,找到所有两个和为target的数组下标index1,index2使用hash_map,时间复杂度为o(n),空间复杂度为o(n).Exp:a{ 2, 3, 1, 4, 5, 6, 7 },target=6;输出:0    3          2    4#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt...

罗伦 1169

找出序列中求和最接近于target的三个数 3Sum Closest

题目源自于leetcode。好题。 题目:Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each

LUCKYOJ 2830

算法-leetcode-每日一题-给出数组中和为target的索引

给出一个整数数组,返回两个索引,这两个索引对应的数字和为一个特定的值。假定上述问题只有一个解决方案,并且只能遍历数组一次 Example: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]. 分析:这种问题一定要想到用空间换时间,必须定义一个辅助的数据结构进行存...

wujingchangye的博客 708

LeetCode——34 搜索范围:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级

拿到题目,看到时间要求O(logn),立刻想到了折半查找已通过的代码如下:class Solution { public: vector&lt;int&gt; searchRange(vector&lt;int&gt;&amp; nums, int target) { //折半查找思路 int low,high,mid,len; len=nu...

honeyht的博客 6071
上一篇: Combination Sum 无序数组中找组合(每个元素可用多次)使得和为target@LeetCode
下一篇: Next Permutation 求下一个排序@LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值