数字列表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 以 ...
随机推荐
- Pycharm下载与使用及python的基础数据类型
1.Pycharm编辑器 1.1.下载地址 https://www.jetbrains.com/pycharm/ 1.2.Pycharm编辑器下载 1.根据自己的操作系统选择相对应的下载方式 2.尽量 ...
- 2 c++编程-核心
重新系统学习c++语言,并将学习过程中的知识在这里抄录.总结.沉淀.同时希望对刷到的朋友有所帮助,一起加油哦! 本章是继上篇 c++编程-基础 之后的 c++ 编程-核心. 生命就像一朵花,要拼尽 ...
- Solon v1.11.0 发布,Hello Java
一个更现代感的 Java 应用开发框架:更快.更小.更自由.没有 Spring,没有 Servlet,没有 JavaEE:独立的轻量生态.主框架仅 0.1 MB. @Controller public ...
- apktool回编译报错
报错 error: No resource identifier found for attribute 'XXX' in package 'XXX' 解决 将xml文件中 "http:// ...
- 一文带你快速入门 Go 语言微服务开发 - Dubbo Go 入门实践总结
更多详细示例可直接访问 Dubbo 官网 或搜索关注官方微信公众号:Apache Dubbo 1. 安装Go语言环境 建议使用最新版 go 1.17 go version >= go 1.15 ...
- 第二章:seaborn调色板
1.系统默认调色板 1 import seaborn as sns 2 import matplotlib.pyplot as plt 3 4 # 设置画布的大小 5 sns.set(context= ...
- 【Shell案例】【awk和循环、NR、格式打印、全局变量、$0、通配符】12、打印每一行出现的数字个数
写一个 bash脚本以统计一个文本文件 nowcoder.txt中每一行出现的1,2,3,4,5数字个数并且要计算一下整个文档中一共出现了几个1,2,3,4,5数字数字总数. 示例: 假设 nowco ...
- JavaScript入门⑦-DOM操作大全
JavaScript入门系列目录 JavaScript入门①-基础知识筑基 JavaScript入门②-函数(1)基础{浅出} JavaScript入门③-函数(2)原理{深入}执行上下文 JavaS ...
- 1.5.6 NN与2NN-hadoop-最全最完整的保姆级的java大数据学习资料
目录 1.5.6 NN与2NN 1.5.6.1 HDFS元数据管理机制 1.5.6.2 Fsimage与Edits文件解析 1.5.6.2.1 Fsimage文件内容 1.5.6.2.2 Edits文 ...
- PowerDotNet平台化软件架构设计与实现系列(15):支付平台
PowerDotNet个人项目中功能全面而强大的一个系统是支付平台.我对PowerDotNet的自信很大程度上来自于经过PowerDotNet重写后的支付.财务.结算.CRM等业务型公共服务系统的稳定 ...