数字列表number,目标值target,找到number中两个不同数字之和等于target的数字,输出下标并顺序排列 ----笔试题记录扩展
一、思路:
输入:数字列表number,目标值target
判断条件:数字列表中两个不同数字相加等于target
输出:符合条件的两个数字的下标,下标顺序排列
方法1:
def list(number, target):
a = []
number0 = []
for i in number:
number1.append(i)
number1 = set(number)- set(number0) ##number2是元组,存储所有不在number1中并且不重复的数
for j in number1:
if i+j == target:
a = [number.index(i), number.index(j)]
print(a)
return
number = [1, 3, 4, 3, 2, 9]
target = 6
list(number, target)
方法2:把方法1中内层循环遍历的可迭代序列(number1)的生成简化了一下,更简洁
def list(number, target):
a = []
for i in number:
number1 = [x for x in number if x != i] ##number1中不包含i
for j in number1:
if i+j == target:
a = [number.index(i), number.index(j)]
a.sort()
print(a)
return
list([1, 3, 4, 3, 2, 9], 6)
二、扩展一:
可以看到上面执行时输入的列表中是存在重复值的,那如果题目中没有要求是不同数字相加,要怎么实现呢?
def list(number, target):
a = []
number1 = number.copy()
for i in number:
number1.remove(i)
for j in number1: ##number1中是number中所有不等于i的数字
if i+j == target:
if i == j: ##由于number.index(i)只能取到第一个下标,所以当两个相加的数字相等时,可以用内置函数enumerate()来获取列表元素的索引和值
a = [x for x, y in enumerate(number) if y == i][:2] ##因为只需要输出任意两个符合条件的元素下标,这里取前两个
else:
a = [number.index(i), number.index(j)]
a.sort()
print(a)
return
number = [1, 3, 4, 3, 2, 9]
target = 6
list(number, target)
因为这里只要找到两个数字相加等于目标值就行,对数字在列表中的顺序并没有要求,所以我们还可以先对重复数字进行处理,如果重复数字n,2n等于目标值,那么直接输出;2n不等于目标值再看列表中其他的数字
def list(number, target):
a = []
if len(number) != len(set(number)):
number1 = filter(lambda x: number.count(x) > 1, number)
if target % 2 == 0:
for i in number1:
if 2 * i == target:
a = [x for x, y in enumerate(number) if y == i][:2]
a.sort()
print(a)
return
number2 = number.copy()
for i in number:
number2.remove(i)
for j in number2:
if i !=j and i + j == target:
a = [number.index(i), number.index(j)]
a.sort()
print(a)
return
number = [1, 3, 4, 3, 7, 9]
target = 8
list(number, target)
三、 扩展二:
这里题目限制了只需要任意两个相加符合条件的数字,如果是需要输出所有符合两个数字相加等于目标值的组合又怎么来实现呢?
def list(number, target):
a = []
number1 = number.copy()
for x, y in enumerate(number):
number1.remove(y)
for m, n in enumerate(number1, x+1): ##这里number1中删除了数字y,enumerate()生成对象的时候,制定下标从y在number中的下标加一开始
if y + n == target:
a.append((x, m))
a.sort()
print(a) number = [1, 2, 3, 4, 2, 3, 4]
target = 5
list(number, target)
数字列表number,目标值target,找到number中两个不同数字之和等于target的数字,输出下标并顺序排列 ----笔试题记录扩展的更多相关文章
- leetcode-1 Two Sum 找到数组中两数字和为指定和
问题描写叙述:在一个数组(无序)中高速找出两个数字,使得两个数字之和等于一个给定的值.如果数组中肯定存在至少一组满足要求. <剑指Offer>P214(有序数组) <编程之美& ...
- LeetCode 18 4Sum (4个数字之和等于target)
题目链接 https://leetcode.com/problems/4sum/?tab=Description 找到数组中满足 a+b+c+d=0的所有组合,要求不重复. Basic idea is ...
- 求数组中两数之和等于target的两个数的下标
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...
- Java 找到数组中两个元素相加等于指定数的所有组合
思路1:可以用hash表来存储数组中的元素,这样我们取得一个数后,去判断sum - val 在不在数组中,如果在数组中,则找到了一对二元组,它们的和为sum,该算法的缺点就是需要用到一个hash表,增 ...
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...
- leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)
136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...
- 动手写个数字输入框1:input[type=number]的遗憾
前言 最近在用Polymer封装纯数字的输入框,开发过程中发现不少坑,也有很多值得研究的地方.本系列打算分4篇来叙述这段可歌可泣的踩坑经历: <动手写个数字输入框1:input[type=nu ...
- 《剑指offer》-找到数组中重复的数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...
- [LeetCode] 448. Find All Numbers Disappeared in an Array 找到数组中消失的数字
题目描述 给定n个数字的数组,里面的值都是1-n,但是有的出现了两遍,因此有的没有出现,求没有出现值这个数组中的值有哪些. 要求不能用额外的空间(除了返回列表之外),时间复杂度n 思路 因为不能用额外 ...
- ExtJS学习-----------Ext.Number,ExtJS对javascript中的Number的扩展
关于ExtJS对javascript中的Number的扩展,能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 以 ...
随机推荐
- whylogs工具库的工业实践!机器学习模型流程与效果监控 ⛵
作者:韩信子@ShowMeAI 机器学习实战系列:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/artic ...
- 【SQL基础】多表查询:子查询、连接查询(JOIN)、组合查询(UNION集合运算)
〇.概述 1.内容 JOIN表连接(内连接INNER JOIN/JOIN)(外连接LEFT/RIGHT (OUTER) JOIN) 集合运算-UNION联合 2.建表语句 drop table if ...
- Kafka技术专题之「性能调优篇」消息队列服务端出现内存溢出OOM以及相关性能调优实战分析
内存问题 本篇文章介绍Kafka处理大文件出现内存溢出 java.lang.OutOfMemoryError: Direct buffer memory,主要内容包括基础应用.实用技巧.原理机制等方面 ...
- Python全栈工程师之从网页搭建入门到Flask全栈项目实战(6) - Flask表单的实现
1.表单介绍 1.1.表单知识回顾 常见的表单元素: 表单标签<form> action:表单提交的URL地址 method:表单请求的方式(GET/POSt) enctype:请求内容的 ...
- .Net执行SQL/存储过程之易用轻量工具
支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac. 由于该工具近来被广东省数个公司2B项目采用,且表现稳定,得到良好验证 ...
- Kubernetes环境鉴权与自动发现
概览文章中提到了k8s的鉴权模式,简单回顾下: RBAC: Role-based access control 是基于角色的访问控制 ABAC: Atrribute-based access cont ...
- Vue3.0 生命周期
所有生命周期钩子的this上下文都是绑定至实例的. beforeCreate:在实例初始化之后.进行数据帧听和事件/侦听器的配置之前同步调用. created:实例创建完成,主要包括数据帧听.计算属性 ...
- python多进程程序打包成exe的问题
粘贴一下部分的多进程代码 if __name__ == '__main__': """"流程模拟""" multiprocessi ...
- Redis网络模型究竟有多强
如果面试官问我:Redis为什么这么快? 我肯定会说:因为Redis是内存数据库!如果不是直接把数据放在内存里,甭管怎么优化数据结构.设计怎样的网络I/O模型,都不可能达到如今这般的执行效率. 但是这 ...
- 三台服务器使用docker搭建redis一主二从三哨兵,概念-搭建-整合springboot
一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...