寻找和为定值的N个数

算法学习笔记6-寻找和为定值的两个数(二分查找) 本文参考了文章《寻找和为定值的两个数》寻找和为定值的两个数题目描述输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(N)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。 阅读详情

1.寻找和为定值的N个数

#include<iostream>
#include<list>
using namespace std;
list<int> list1;
void GetNSum(int *a,int k, int n)
{
	if(k == a[n-1])
	{
		list<int>::iterator it;
		for(it = list1.begin();it!=list1.end();it++)
		{
			cout<<*it<<" ";
		}
		cout<<a[n-1]<<endl;
		return;
	}
	else if(n<=0) return;
	else 
	{
		GetNSum(a,k,n-1);
		//---------------------------
		list1.push_front(a[n-1]);
		GetNSum(a,k-a[n-1],n-1);
		list1.pop_front();
	}

}
int main()
{
	int a[10] = {-1,0,1,2,-1,-4};
	GetNSum(a,0,6);
}


2.寻找和为定值的3个数(在寻找和为定值的n个数方法中对链表的长度进行限制)


#include<iostream>
#include<list>
using namespace std;
list<int> list1;
void GetNSum(int *a,int k, int n)
{
	if(k == a[n-1])
	{
		if(list1.size() == 2)
		{
			list<int>::iterator it;
			for(it = list1.begin();it!=list1.end();it++)
			{
				cout<<*it<<" ";
			}
			cout<<a[n-1]<<endl;
			return;
		}
		else return;
	}
	else if(n<=0) return;
	else 
	{
		GetNSum(a,k,n-1);
		//---------------------------
		list1.push_front(a[n-1]);
		GetNSum(a,k-a[n-1],n-1);
		list1.pop_front();
	}

}
int main()
{
	int a[10] = {-1,0,1,2,-1,-4};
	GetNSum(a,0,6);
}

另一种方法,参考别的,自己也实现了下代码

思路:假设输入数组个数为n,每一个数用1bit表示,bit位为0表示没用使用这个数,bit为1 表示使用这个数,比如7位111,则使用了数组中a【0】、a【1】、a【2】中的三个数,首先找找 有三个1的,再看加和是否为指定的值(例子的加和默认为0)。

#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int numof1(int i)
{
int result = 0;
while(i)
{
i = i&(i-1);
result++;
}
return result;
}
vector<vector<int> > threeSum(vector<int>& nums) {
vector<vector<int> >a;
int len = nums.size();
cout<<"nums.size()="<<nums.size()<<endl;
int bit = 1<<len;
cout<<"bit="<<bit<<endl;
for(int i = 1;i<bit;i++)
{
int sum = 0;
vector<int> tmp;
if(numof1(i)==3)
{
cout<<"i = "<<i<<" ";
for(int j=0;j<len;j++)
{
if((i&(1<<j)) != 0)
{
int tmpnum = i&(1<<j);
cout<<"tmpnum="<<tmpnum<<" ";
sum+=nums[j];
cout<<nums[j]<<"("<<j<<")"<<" ";
tmp.push_back(nums[j]);
}
}
cout<<"sum = "<<sum<<endl;
if(sum == 0)
{
a.push_back(tmp);
}
}
}
return a;
}
};
int main()
{
vector<int> test;
test.push_back(-1);
test.push_back(0);
test.push_back(1);
test.push_back(2);
test.push_back(-1);
test.push_back(-4);
class Solution A;
vector<vector<int> >a = A.threeSum(test);
cout<<a.size()<<endl;
for(int i = 0;i<a.size();i++)
{
cout<<a[i][1]<<" "<<a[i][2]<<" "<<a[i][3]<<endl;
}
}

有序数列中查找和为某定值的两个数 问题描述: 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。 如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。 算法: 阅读详情

相关推荐

从n个整数中寻找和为指定值的多个数,0-1背包问题

题目描述 输入两个整数n和sum,从数列1,2,3.......n 中随意取几个数,使其和等于sum,要求将其中所有的可能组合列出来。 分析与解法 解法一 注意到取n,和不取n个区别即可,考虑是否取第n个数的策略,可以转化为一个只和前n-1个数相关的问题。 如果取第n个数,那么问题就转化为“取前n-1个数使得它们的和为sum-n”,对应的代码语句就是sumOfkNumber(sum - n, n - 1); 如果不取第n个数,那么问题就转化为“取前n-1个数使得他们的和为sum”,对应的代码语句

愿君出走半生,归来时仍是少年 1047

Java实现寻找和为定值的多个数

1 问题描述 输入两个整数n和sum,要求从数列1,2,3,…,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来。 2 解决方案 上述问题是典型的背包问题的应用,即先找出n个数的所有组合,再在这些组合中寻找组合数相加之和等于sum的组合,并依次输出这些组合中的数。 package com.liuzhen.array_2; public class ManySumN { ...

南 墙 1万+

Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)

Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法) 目录 数组 1、寻找和为定值的两个数 2、和为定值的m个数 3、荷兰国旗问题 4、长度为2n的完美洗牌算法 5、任意长度数组的完美洗牌算法 数组 1、寻找和为定值的两个数 输入一个数组A[0…N-1]和一个数...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4357

寻找和为给定值的n个数

文章目录问题描述:输入一个数组A[0..N-1]和一个数字Sum,在数组中查找n个数使得他们的和为Sum。1.n=2(找两个数)2.n=m(找若干个数) 问题描述:输入一个数组A[0…N-1]和一个数字Sum,在数组中查找n个数使得他们的和为Sum。 1.n=2(找两个数) 1)直接暴力法 实现思路:直接遍历整个数组,让每一个数字和其他数组相加,如果和为Sum,输出;否则,接着遍历。 实现方法如下...

Dr-Yang的博客 1425

AI应用架构师实战:高等教育智能课程推荐系统开发

性能:选课季并发量达1000QPS,推荐响应时间≤500ms(否则学生不耐烦)。数据隐私:符合《教育数据安全管理规范》,学生姓名、学号等敏感信息需匿名化存储。可扩展性:支持新增课程类型(如MOOC、实践课)、新增数据源(如竞赛获奖记录)。教育AI要“以教为中心”:不能纯技术驱动,要和教育工作者深度合作(如教师参与定义课程的前置关系)。数据是核心:数据质量决定推荐效果,要重视数据治理和隐私保护。持续迭代:教育需求是动态的(如每年新增课程、学生目标变化),要定期收集用户反馈,更新模型和策略。张三。

AI大模型应用之禅 1349

从零组装一台会‘看’的无人机:手把手教你配置NUC机载电脑与D435深度相机(环境搭建篇)

本文详细介绍了如何从零开始组装一台具备视觉能力的智能无人机,重点讲解了NUC机载电脑与D435深度相机的配置方法。通过Ubuntu系统安装、ROS环境搭建、深度学习框架配置等步骤,帮助开发者实现无人机的自主避障和目标跟踪功能。文章还提供了性能优化和常见问题解决方案,是无人机视觉系统开发的实用指南。

weixin_30915275的博客 397

寻找和为定值的n个数(Java版)

Java基于递归的版本: 代码里有简略的注释 import java.util.*; public class Demo { static ArrayList&lt;ArrayList&lt;Integer&gt;&gt; lists = new ArrayList&lt;&gt;(); static LinkedList&lt;Integer&gt; fuck = new...

1868

告别城市峡谷定位漂移:手把手教你用PSINS仿真INS/NHC/ODO组合导航(附代码获取)

本文详细解析了INS/NHC/ODO组合导航系统在城市峡谷环境中的应用,通过PSINS平台实现精准定位。文章涵盖核心原理、环境搭建、算法实现及性能优化,帮助开发者解决GNSS信号中断时的定位漂移问题,提升自动驾驶系统在复杂环境中的可靠性。

weixin_30329623的博客 429

寻找和为定值的多个数(Java版实现)

package SEExample; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /**  *寻找和为定值的多个数  * 题目:输入两个整数n和sum,从数列1,2,3.......n 中随意取几个数,使其和等于sum,要求将其中所有的可能组合列出来。  *

xuni1的专栏 2871

每天10分钟,混剪视频Agent产出50条爆款,单月变现6位数(喂饭级教程)

混剪视频是指将多个视频片段、图片或音频素材进行剪辑组合,创造出新的视频内容。随着Coze上线联动剪映功能,混剪视频制作正在进入自动化时代,为创作者带来巨大便利。高效自动化处理:AI可以自动完成琐碎的剪辑工作,让创作者省下大量时间专注于项目策划和创意。批量素材产出:特别适用于抖音、小红书和视频号等平台上的养生、科普、心理、疗愈等垂直领域,可以自动化批量生产图片和视频素材。引流获客:通过优质内容吸引目标受众知识变现:通过教学传授技术工具变现:将搭建好的工作流作为产品销售。

汤师爷的博客 864

基于稀疏表示字典学习的图像超分辨率-杨建超论文解析

文章:《Image Super-Resolution via Sparse Representation》 作者:杨建超 信号稀疏的定义: 令字典D的原子个数M,信号维度为N,则有以下三种关系: M = N时,D为完备的; M > N时,D为冗余的; M>>N时, D为过完备的。 图解如下: 借鉴了压缩感知的思想,通过对大量低分辨率图像和高分辨...

ycc18829026593的博客 7637

在数组中寻找和为定值的n个数

1 /*-------------------------------------------------------*/ 2 /*寻找和为定值的两个数 3 输入一个数组A[0,N-1]和一个数字Sum,在数组中查找 4 两个数Ai,Aj,是真的Ai+Aj=Sum*/ 5 /*解法一:暴力求解*/ 6 /*解法二:一个数组两头扫*/ 7 8 void TwoSu...

weixin_30512785的博客 950

Dynamics 365 F&O新手必看:Visual Studio 2019搭建项目框架全流程(含Model避坑指南)

本文详细介绍了如何在Visual Studio 2019中为Dynamics 365 Finance and Operations搭建企业级项目框架,包括Model分层策略、Solution管理及开发工作流优化。特别提供了Model避坑指南和实用配置建议,帮助新手快速上手并避免常见错误。

weixin_30505225的博客 381

寻找和为定值的n个数

寻找和为定值的N个数 题目: 输入两个整数n和sum,要求从数列1, 2, 3, ...,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来。 思路: 上述问题是典型的背包问题的应用,即先找出n个数的所有组合,再在这些组合中寻找组合数相加之和等于sum的组合,并依次输出这些组合中的数。 实现: public class ManySumN {       

mween的博客 837

【PX4学习笔记】1. ROS及PX4环境搭建

环境 Ubuntu18.04 安装教程参考 https://www.guyuehome.com/8983 安装过程中问题的解决 问题1 rosdep init 错误的终极解决方法 注意etc/下的ros和rostep文件夹要自己建 问题2 Ubuntu安装ROS报错 sudo: rosdep:找不到命令 问题3(更好地解决了问题1、2)【推荐】 解决GitHub的raw.githubusercontent.com无法连接问题 问题4:GeographicLib的安装 教程中安装GeographicLib d

【人工智障 | 计算鸡视觉 | 机器孩】 8232

ROS从入门到精通1-1:ROS核心架构、常用指令与计算图

本文介绍ROS的核心架构,各个文件、目录的用途、常用命令行工具、动态计算图原理。

FRIGIDWINTER的博客 6369

【July程序员编程艺术】之寻找和为定值的两个或者多个数

一.寻找和为定值的两个数题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。我的思路:题目要求时间复杂度是O(n),所以整个数组只可以遍历一轮。针对题目中给出的实例,对于数4,我们实际上就是要找数

messiran10的专栏 816

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【程序员编程艺术】第五章:寻找满足和为定值的两个或多个数

题目描述 输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(N)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

solar一抹阳光的专栏 1497

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

寻找和为定值的两个数

题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。 解析:如果数组是无序的,先排序(n*logn),然后用两个指针i,j,各自指向数组的首尾两端,令i=0,j=n-1,然后i++,j--...

weixin_30315723的博客 65

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【题目】Problem C.寻找i*j=m的个数

Problem C.寻找i*j=m的个数 问题描述 3*3的矩阵内容。 1 2 3 2 4 6 3 6 9 即a[i][j] (1<=i<=n,1<=j<=n) = ij。 问一个这样nn的矩阵里面,里面m出现的次数。 例如n为3,m为6. 那么出现的次数就是2 Input 输入正整数N,表示N例测试(N<=20)。接着输入n(n<=105),(m<=...

漆黑梦工厂 431

(10)寻找满足和为定值的两个或多个数

程序员编程艺术:第五章、寻找和为定值的两个或多个数       作者:July,yansha,zhouzhenren。     致谢:微软100题实现组,编程艺术室。     微博:http://weibo.com/julyweibo   。     出处:http://blog.youkuaiyun.com/v_JULY_v  。     wiki:http://tctop.wikispac

dangzhileiqaz的专栏 949

请用算法实现 ,从给定的无序、不重复的数组data中,取出n个数,使其相加和为sum.

请用算法实现 ,从给定的无序、不重复的数组data中,取出n个数,使其相加和为sum.并给出算法的时间/空间复杂度。(不需要找到所有的解); function getRsult(data,n,sum){ if(n==0 &amp;&amp;sum==0){ return true } if(n&lt;0){ return false } if(...

weixin_44616890的博客 4870

python 版 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字

python 版 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是 O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组 1、2、4、7、11、15 和数字 15。由于 4+11=15,因此输出 4 和 11。 思路: (1)让指针指向数组的头部和尾部,相加,如果小于M,则增大头指针,如果大于则减小尾指针...

ly_58的博客 2627

matlab 怎么求数组里面每个元素个数_数组问题集合

这个题集后面的内容都是DP,头疼。1.输入n个整数,输出最小的k个Solution-1: 先排序后输出O(nlogn)//快速排序复杂度Solution-2:把数组分为length=k, length=n-k两部分,通过比较大小来做//O(n*k)Solution-3:用堆来处理O(n*logk)Further:谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个...

weixin_39798626的博客 4704

和为n连续正数序列 & 排序数组中和为给定值的两个数字

本文转自:http://zhedahht.blog.163.com/blog/static/25411174200732711051101/ http://zhedahht.blog.163.com/blog/static/2541117420072143251809/ 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复

龙乐的专栏 923
上一篇: 大数据相乘
下一篇: TCP三次握手和四次挥手以及缺陷(详细)
lin_FS
博客等级 码龄15年 92粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值