思路一: for循环嵌套遍历(想作死可以试下)
思路二: 双指针(分别指向头、尾,往之间收缩)
思路三: hashmap(用空间换时间)

  1. 两个数字之和为某个数
# 思路三
def getRes_HashMap(nums, target):nums.sort()result = set()for index, number in enumerate(nums):if target-number in nums[index+1:]:result.add((number, target-number))return result# 思路二: 使用双指针, 复杂度nlogn(排序)+n(遍历)找到和为target的两个数
def getRes_HashMap(nums, target):result = set()nums = sorted(nums)min_index = 0max_index = len(nums)-1while min_index < max_index:if nums[min_index] + nums[max_index] == target:result.add((nums[min_index], nums[max_index]))min_index += 1max_index -= 1elif nums[min_index] + nums[max_index] < target:min_index += 1else:max_index -= 1return sorted(list(result))
  1. 和为target的两个数并且乘积最小
def getRes_HashMap(nums, target):nums.sort()result = []for index, number in enumerate(nums):if target-number in nums[index+1:]:if len(result) == 0:result.append(number)result.append(target-number)elif number * (target-number) < result[0] * result[1]:result.clear()result.append(number)result.append(target-number)return result
  1. 找到和为target的三个数
def getRes_HashMap(nums, target):result = set()for i, n1 in enumerate(nums):for j, n2 in enumerate(nums[i+1:]):if target - n1 - n2 in nums[i+j+2:]:min_n = min(n1, n2, target-n1-n2)max_n = max(n1, n2, target-n1-n2)result.add((min_n, target-min_n-max_n, max_n))return result# 使用双指针,找到和为target的三个数
def getRes_HashMap(nums, target):result = set()nums.sort()for i in range(len(nums) - 2):min_index = i+1max_index = len(nums) - 1while min_index < max_index:if nums[i] + nums[min_index] + nums[max_index] == target and (nums[i], nums[min_index], nums[max_index]) not in result:result.add((nums[i], nums[min_index], nums[max_index]))min_index += 1max_index -= 1elif nums[i] + nums[min_index] + nums[max_index] < target:min_index += 1elif nums[i] + nums[min_index] + nums[max_index] > target:max_index -= 1return sorted(list(result))
  1. 找到和为target的四个数
# 双指针
def getRes_HashMap(nums, target):result = set()nums.sort()for i in range(len(nums) - 3):for j in range(i + 1, len(nums) - 2):min_index = j + 1max_index = len(nums) - 1while min_index < max_index:if nums[i] + nums[j] + nums[min_index] + nums[max_index] == target and (nums[i], nums[j], nums[min_index], nums[max_index]) not in result:result.add((nums[i], nums[j], nums[min_index], nums[max_index]))min_index += 1max_index -= 1elif nums[i] + nums[j] + nums[min_index] + nums[max_index] < target:min_index += 1elif nums[i] + nums[j] + nums[min_index] + nums[max_index] > target:max_index -= 1return sorted(list(result))# map的方式
def getRes_HashMap(nums, target):nums.sort()result = set()for i, n1 in enumerate(nums):for j, n2 in enumerate(nums[i+1:]):for m, n3 in enumerate(nums[i+j+2:]):if target-nums[i]-nums[i+j+1]-nums[i+j+m+2] in nums[i+j+m+3:]:temp = sorted(list([nums[i], nums[i+j+1], nums[i+j+m+2], target-nums[i]-nums[i+j+1]-nums[i+j+m+2]]))result.add((temp[0], temp[1], temp[2], temp[3]))return sorted(result)

在一个数组中找到几个数之和为某个数字相关推荐

  1. 在一个数组中查找两个重复出现的数字

    题目如下:现有一个数组长度为n+1,里面存放有1到n-2,顺序不定,其中有两个数字出现了两次,现在要找出那两个数字. 例子A={2, 3, 1, 4, 5, 2, 4}, 这个数组长度为7,存放了1到 ...

  2. 漫画:如何在数组中找到和为 “特定值” 的三个数?

    作者 | 小灰 来源 | 程序员小灰(ID:chengxuyuanxiaohui) 前一段时间,我们介绍了LeetCode上面的一个经典算法题[两数之和问题]. 这一次,我们把问题做一下扩展,尝试在数 ...

  3. 有15个数按从小到大的顺序存放在一个数组中。(折半查找)

    有15个数按从小到大的顺序存放在一个数组中.输入一个数,要求用折半查找法找出该数是数组中第几个元素的值.如果该数不在数组中,输出"不在表中". 折半查找法的原理是:对于一个升序数组 ...

  4. 有苦有乐的算法 --- 在一个数组中,有一种数出现了奇数次,其余数都出现了偶数次,找到这种数

    题目 在一个数组中,有一种数出现了奇数次,其余数都出现了偶数次,找到这种数 例: [1,1,4] ==> 4 [1] ==> 1 [2,3,6,3,1,2,1] ⇒ 6 解析 因为N^N= ...

  5. Java黑皮书课后题第7章:*7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序。改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换

    7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序.改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换 题目 题目描述 破题 代码 运行 ...

  6. 有十五个数按由大到小顺序存放在一个数组中_「图形化编程」前导知识-数组(一)...

    今天我们来学习一个新的概念-数组.这节课将通过一个小程序讲解数组的基本概念-数组的长度和下标 定义 数组指的是有序元素的集合,数组中的每个元素具有相同的类型,按照顺序排列的形式组织在一起.我们可以把数 ...

  7. C语言:有N个数从小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个数。如果不在数组中,打印“not found”。

    /*有N个数从小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个数.如果不在数组中,打印"not found".*/#include<stdio ...

  8. c语言 有15个数按由大到小,C++ 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。...

    有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值.如果该数不在数组中,则输出"无此数". 以下是此题的[c++源代码],需要[c ...

  9. 13.在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。(左神算法基础班源码)

    package basic_class_01; /*** *小和问题在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和.求一个数组的小和.例子:[1,3,4,2,5]1左边比1小的数 ...

最新文章

  1. C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口。
  2. 感谢大家的支持,MVP之后需要总结
  3. python简单代码加法-Python tkinter实现简单加法计算器代码实例
  4. 中国公司占据VVC专利贡献榜4席
  5. slf4j介绍及配置详解
  6. wordpress的手动更新
  7. 所选元素非联通_非固化橡胶沥青防水涂料与耐根穿刺防水卷材(沥青基)施工要点...
  8. centos8 yum太慢_Yum 慢到无法忍受?那是因为你没有这么做
  9. 下一代SQL 产品发布会,诚邀您的参加!!包含 Azure数据服务、高级分析和SQL Server(其中包括支持Linux的SQL Server vNext)。
  10. logstash filter 处理json数据按原始数据字段数据存储
  11. 美团算法 SP | NLP 三面复盘
  12. 会java需要多久能学会python_学好Python,c++ 和Java要多久?
  13. 【模拟信号】基于matlab标准调幅信号产生+解调【含Matlab源码 984期】
  14. 三星 android 5.0系统下载地址,三星S5怎么刷机 三星S5安卓5.0固件包下载地址及刷机教程...
  15. Win11 恢复设置Win10任务栏、快速启动栏及右键菜单(Win11 22000.100版本测试通过)
  16. 汽车CAN总线-基础
  17. 电脑不停,电脑不停重启
  18. 解决Tomcat严重: Parse error in application web.xml file at jndi:/localhost/ipws/WEB-INF/web.xml java.lan
  19. android快速复制粘贴,Android开发复制和粘贴
  20. 湿化学清洗过程中晶片污染控制方法

热门文章

  1. C:\Users\Administrator\AppData\Local\Temp这是什么文件夹
  2. CentOS下MySQL安装配置
  3. 生化实验技术——酵母双杂交
  4. 多租户与多用户的区别
  5. 元宇宙技术教程|如何一键生成虚拟人视频
  6. 3Dmax模型导入unity3d
  7. 可能认识的好友!查询!
  8. 基于springboot的音乐网站的设计与实现(带论文)
  9. java工单管理系统_java毕业设计_springboot框架的工单管理系统
  10. 7-2 然后是几点 (15 分)有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。读入两个数字,第一个数字以这样