Python算法题----在列表中找到和为s的两个数字

    列表data的值为[1, 3, 4, 5, 8, 9, 11],找出这个列表中和为13的两个数字的所有组合。这个好找,上过幼儿园大班的,估计都能找出来。4+9=13, 5+8=13。如何用python写一个函数来实现呢。

解法一:

超级大循环

最容易想到的就是遍历啊。嵌套循环,外层循环遍历全部列表,内层循环遍历当前元素位置之后的所有元素。内层循环中将两个数字相加,等于13就break。妥妥找到。

def equalSum01(data=None, twosum=13):result = []for i, vi in enumerate(data):if i + 1 > len(data) - 1:breakfor j, vj in enumerate(data[i+1:]):if vi + vj == twosum:print(vi, vj)result.append((vi, vj))breakreturn result


解法二:

首尾相加法

因为data是升序排列的一个列表,我们可以用两个指针l, r指向列表的两端,那么data[l]+data[r]的和有3种情况:

1、等于S,那就将这两个数字添加的结果列表中,l指针右移,r指针左移

2、小于S, 将l指针右移

3、大于S, r指针左移

def equalSum02(data=None, twosum=13):result = []l = 0r = len(data) - 1while l < r:if data[l] + data[r] == twosum:result.append((data[l], data[r]))l += 1r -= 1elif data[l] + data[r] < twosum:l += 1else:r -= 1return result


解法三:

精准搜索法

遍历data, 期待值 = S - data[i], 如果这个期待值在data[i]右面的剩余列表中,则找到,遍历万一遍,也就找到了所有的。

def equalSum03(data=None, twosum=13):result = []for i, v in enumerate(data):if (twosum - v) in data[i+1:]:result.append((v, twosum - v))return result


从时间复杂度上来说,解法一是时间复杂度最大的一个。解法三因为每次循环都要搜索剩余的列表,应该大于解法二。


单元测试

import unittestclass TestInverseMethods(unittest.TestCase):def test_equalSum01(self):data = [1, 3, 4, 5, 8, 9, 11]result = [(4, 9), (5, 8)]self.assertEqual(equalSum01(data), result)def test_equalSum02(self):data = [1, 3, 4, 5, 8, 9, 11]result = [(4, 9), (5, 8)]self.assertEqual(equalSum02(data), result)def test_equalSum03(self):data = [1, 3, 4, 5, 8, 9, 11]result = [(4, 9), (5, 8)]self.assertEqual(equalSum03(data), result)if __name__ == ‘__main__‘:unittest.main()


...

----------------------------------------------------------------------

Ran 3 tests in 0.000s


OK

(4, 9)

(5, 8)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1664. 生成平衡数组的方案数(前缀和+后缀和)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 。你需要选择 恰好 一个下标&#xff08;下标从 0 开始&#xff09;并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。 比方说&#xff0c;如果 nums [6,1,7,4,1] &#xff0c; 那么&#xff1a; …

sklearn分类器:朴素贝叶斯

朴素贝叶斯朴素贝叶斯&#xff08;Naive Bayes&#xff09;是一个非常简单&#xff0c;但是实用性很强的分类模型。朴素贝叶斯分类器的构造基础是贝叶斯理论。概率论基础概率定义为一件事情发生的可能性。事情发生的概率可以 通过观测数据中的事件发生次数来计算&#xff0c;事…

迪美特TVZ8双核智能高清播放器 在电视上编程不是梦

迪美特TVZ8双核智能高清播放器 两步让普通电视变云电视 独家VST&#xff1a; 全网聚合&#xff0c;极致体验&#xff1a;独家自主设计&#xff0c;炫丽生动的Win8风格UI界面&#xff1a; 新版VST全聚合是华人用户数最多的聚合平台软件&#xff0c;集合视频点播、网络直播…

LeetCode 1665. 完成所有任务的最少初始能量(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个任务数组 tasks &#xff0c;其中 tasks[i] [actuali, minimumi] &#xff1a; actuali 是完成第 i 个任务 需要耗费 的实际能量。minimumi 是开始第 i 个任务前需要达到的最低能量。 比方说&#xff0c;如果任务为 [10, 12] 且你当…

sklearn分类器算法:逻辑回归及案例分析

分类算法之逻辑回归逻辑回归&#xff08;Logistic Regression&#xff09;&#xff0c;简称LR。它的特点是能够是我们的特征输入集合转化为0和1这两类的概率。一般来说&#xff0c;回归不用在分类问题上&#xff0c;因为回归是连续型模型&#xff0c;而且受噪声影响比较大。如果…

词云(WordCloud)制作

以《神雕侠侣》为例&#xff0c;我们制作词云&#xff0c;看看有哪些高频词汇。 1. 导入一些包 # -*- coding:utf-8 -*- # Python Version: 3.7 # Time: 2020/11/27 19:32 # Author: Michael Ming # Website: https://michael.blog.csdn.net/ # File: word_cloud.py # Refere…

sklearn分类器性能评估

分类器性能评估在许多实际问题中&#xff0c;衡量分类器任务的成功程度是通过固定的性能指标来获取。一般最常见使用的是准确率&#xff0c;即预测结果正确的百分比。然而有时候&#xff0c;我们关注的是负样本是否被正确诊断出来。例如&#xff0c;关于肿瘤的的判定&#xff0…

构建iOS风格移动Web应用程序的8款开发框架

http://mobile.51cto.com/web-433992.htm转载于:https://www.cnblogs.com/daishuguang/p/3633409.html

sklearn分类器算法:决策树与随机森林及案例分析

分类算法之决策树决策树是一种基本的分类方法&#xff0c;当然也可以用于回归。我们一般只讨论用于分类的决策树。决策树模型呈树形结构。在分类问题中&#xff0c;表示基于特征对实例进行分类的过程&#xff0c;它可以认为是if-then规则的集合。在决策树的结构中&#xff0c;每…

天池 在线编程 求和查找

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164427478262600292/204998627646706400 2. 解题 暴力 哈希查找 class Solution { public:/*** param inputs: an integer array* param tests: an integer array* return: return true if s…

[转]python 中的字符串连接

python 中可使用 进行字符串的连接操作 但很多文档里都说,python 使用 进行字符串连接的效率低下 这直接导致本人在代码中不敢使用 进行字符串的连接操作 可事实又是怎样呢&#xff1f; 之所以说python 中使用 进行字符串连接的操作效率低下&#xff0c;是因为python中字符…

天池 在线编程 条件串(DP)

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164427478262600292/204998627646706401 2. 解题 把字符串分成ace&#xff0c;bdf 两部分进行处理&#xff0c;求以某个字符结束时的最小删除次数 class Solution { public:/*** param s: wri…

用 Kaggle 经典案例教你用 CNN 做图像分类!

我们来看一个 Kaggle 上比较经典的一个图像分类的比赛 CIFAR( CIFAR-10 - Object Recognition in Images )&#xff0c;这个比赛现在已经关闭了&#xff0c;但不妨碍我们来去通过它学习一下卷积神经网络做图像识别的代码结构。相信很多学过深度学习的同学都尝试过这个比赛&…

ubuntu系统

作者简介: AndrewHudson是英国最大的Linux杂志LinuxFormat的一名定期自由撰稿人。他同时是Fedora5Unleashed一书的合著者。PaulHudson是一位专业的开发人员&#xff0c;FuturePublishing的一名全职新闻工作者。他经常为MacFormat、PC个Answers、PCFormat、PCPlus和LinuxFormat等…

Flask知识点回顾以及重点内容

1. HTTP通信与Web框架 1.1 流程 客户端将请求打包成HTTP的请求报文&#xff08;HTTP协议格式的请求数据&#xff09; 采用TCP传输发送给服务器端 服务器接收到请求报文后按照HTTP协议进行解析 服务器根据解析后获知的客户端请求进行逻辑执行 服务器将执行后的结果封装成HTTP的响…

C#操作AD的例子

一下连接中包含了使用c#对AD操作的各种列子 http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C#40 转载于:https://www.cnblogs.com/dereklovecc/p/3634537.html

机器学习回归算法—线性回归及案例分析

一、回归算法回归是统计学中最有力的工具之一。机器学习监督学习算法分为分类算法和回归算法两种&#xff0c;其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于连续型分布预测&#xff0c;针对的是数值型的样本&#xff0c;使用回归&#xff0c;可以在给定…

LeetCode 1669. 合并两个链表

文章目录1. 题目2. 解题1. 题目 给你两个链表 list1 和 list2 &#xff0c;它们包含的元素分别为 n 个和 m 个。 请你将 list1 中第 a 个节点到第 b 个节点删除&#xff0c;并将list2 接在被删除节点的位置。 下图中蓝色边和节点展示了操作后的结果&#xff1a; 请你返回结果…

机器学习回归算法—性能评估欠拟合与过拟合

机器学习中的泛化&#xff0c;泛化即是&#xff0c;模型学习到的概念在它处于学习的过程中时模型没有遇见过的样本时候的表现。在机器学习领域中&#xff0c;当我们讨论一个机器学习模型学习和泛化的好坏时&#xff0c;我们通常使用术语&#xff1a;过拟合和欠拟合。我们知道模…

Nginx安全配置

nginx本身不能处理PHP&#xff0c;它只是个web服务器&#xff0c;当接收到请求后&#xff0c;如果是php请求&#xff0c;则发给php解释器处理&#xff0c;并把结果返回给客户端。nginx一般是把请求发fastcgi管理进程处理&#xff0c;fastcgi管理进程选择cgi子进程处理结果并返回…