【Python实践-8】和为S的两个数字
程序员文章站
2022-06-22 12:54:27
(剑指offer)输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 思路:选定第一个数字,然后遍历后面的数字求和并与S比较,需要n-1次,不行的话再选定第2,3,,,n个数字,需要n^2次,时间复杂度比较高。更简单的方法 ......
(剑指offer)输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s,如果有多对数字的和等于s,输出两个数的乘积最小的。
思路:选定第一个数字,然后遍历后面的数字求和并与s比较,需要n-1次,不行的话再选定第2,3,,,n个数字,需要n^2次,时间复杂度比较高。更简单的方法可以是定义两个指针,第一个指向第一个元素,第二个指向最后一个元素,两个元素相加,如果等于s则输出这两个元素,如果大于,则将第二个指针向前移一位,再求和进行比较;如果小于,则将第一个指针向前移一位,再进行求和比较。
1 def findnumberwithsum(data,tsum): 2 i=0 3 j=len(data)-1 4 if not data or not tsum: 5 return [] 6 while i<len(data) and j>0: 7 if data[i]+data[j]==tsum: 8 return (data[i],data[j]) 9 if data[i]+data[j]>tsum: 10 j=j-1 11 if data[i]+data[j]<tsum: 12 i=i+1 13 return ()
知识点:
1、if not x是判断是否为none的情况,if x is not none这种写法也是可以的。注意代码完备性,需判断传入参数是否为空。
2、涉及到两个元素,想到定义两个指针,避免多层循环。
3、要考虑找不到两个数的情况,可以输出一个空列表或空元组。
推荐阅读
-
中国.NET开发者峰会特别活动-基于k8s的微服务和CI/CD动手实践报名
-
[剑指offer] 和为s的两个数字(C++解法)
-
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数 - python实现
-
python练习题---给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
Leetcode打卡8:题号1:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案
-
(Python3)给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
LeetCode [Python]1. 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
和为S的两个数字题解
-
【Python实践-8】和为S的两个数字
-
在排序数组中查找和为给定值的两个数字