数字列表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 以 ...
随机推荐
- Codeforces Round #836 (Div. 2) A-D
比赛链接 A 题意 给一个字符串 \(s\) ,对其加倍,即每个字符后面追加一个相同字符. 加倍后可以重排列,要求构造一个回文串. 题解 知识点:构造. 既然可以重排列了,那顺序是随意的了,直接翻转加 ...
- 解决python3解压文件名乱码问题(unzip)
看来很多文章,不过我觉得最有效的还是改源码,因为我用的sublime text 3有插件Anaconda可以很方便的跳转到源码文件,你也可以入python3 的安装目录, 搜索 zipfile.py这 ...
- 【大数据面试】【数仓项目】分层:ODS层、DWD层、DWS层、ADS层构成、操作
一.ODS层 1.保持数据原貌,不做任何修改 2.数据压缩:LZO压缩,减少磁盘空间 3.创建的是分区表:可以防止后续的全表扫描 包括 用户行为:string line dt ods_start ...
- Flaks框架(g对象,session,数据库连接池,信号,flask-script,SQLAlchemy(ORM))
目录 一:g对象 简介 1.g对象和session的区别 2.g对象实战代码 二:flask-session(借助于第三方插件连接redis保存session ) 1.方式一: 2.方式二(flask ...
- SpringCloud微服务框架复习笔记
SpringCloud微服务框架复习笔记 什么是微服务架构? 微服务是一种软件开发技术,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进 ...
- excel甘特图制作
1.插入图表 1 1.选中数据区域(3列,如图所示)--点击插入--推荐的图表--堆积条形图 END 2.甘特图制作 1 2.点击图表工具--设计--选择数据. 轴标签区域改为--确定项目.. ...
- python中使用pip 安装第三方库报错归类及解决方式
1. 离线安装virtualenv报错,安装命令:python setup.py install 解决方式:升级setuptools 2. 安装第三方库时安装失败,安装命令:pip install ...
- windows7系统中安装deepin系统虚拟机
在windows系统中安装虚拟机首先需要在widows上下载并安装虚拟机创建工具VMware.这里用的工具版本是 VMware-workstation-full-9.0.2-1031769_www.s ...
- python之路43 JavaScript语法BOM与DOM jQuery对比 标签绑定事件
前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...
- 【力扣】nSum问题模板
nSum问题模板 两数之和.三数之和.四数之和. private List<List<Integer>> nSum(int[] nums, long target, int s ...