python求解在给定递减数组中寻找两个数和等于定值,乘积最小
问题很简单直接看实现即可
#!usr/bin/env python
#encoding:utf-8'''
__Author__:沂水寒城
功能:在给定递减数组中寻找两个数和等于定值,乘积最小
'''def test_func(num_list, num):''''''tmp=num_list[0]*num_list[1]length=len(num_list)res_list=[]for i in range(length):for j in range(length-1,-1,-1):if num_list[i]+num_list[j]==num:one=num_list[i]*num_list[j]res_list.append([num_list[i], num_list[j]])tmp=min(tmp,one)print 'All num pairs are:', res_listprint 'min mutilple result is:', tmpif __name__ == '__main__':num_list=[35,28,25,20,19,18,17,16,15,14,13,12,10,9,8,7,6,5,4,3,2,1]num=20test_func(num_list,num)
结果如下:
All num pairs are: [[19, 1], [18, 2], [17, 3], [16, 4], [15, 5], [14, 6], [13, 7], [12, 8], [10, 10], [8, 12], [7, 13], [6, 14], [5, 15], [4, 16], [3, 17], [2, 18], [1, 19]]
min mutilple result is: 19
[Finished in 0.3s]
当然上面的方法是最直观最简单的但是简单的想法带来的是时间复杂度的提升,在这里考虑可以将时间复杂度降低为O(n)级别,即只需要一次遍历元素即可,这个题目是我今天下午面试的编程中的一个,这个思路我想到了但是因为紧张当时面试官问我还有没有复杂都不是O(n*n)的方法,我说没想到,主要是紧张导致我以为这种简单的方法时间复杂度也是O(n*n)了,哎,真是不应该,简单的方法采用的策略是:首尾同时开始遍历,很简单,下面是具体实现:
#!usr/bin/env python
#encoding:utf-8'''
__Author__:沂水寒城
功能:在给定递减数组中寻找两个数和等于定值,乘积最小
'''def test_func(num_list, num):'''暴力法'''tmp=num_list[0]*num_list[1]length=len(num_list)res_list=[]for i in range(length):for j in range(length-1,-1,-1):if num_list[i]+num_list[j]==num:one=num_list[i]*num_list[j]res_list.append([num_list[i], num_list[j]])tmp=min(tmp,one)print 'All num pairs are:', res_listprint 'min mutilple result is:', tmpdef test_func2(num_list, num):'''简单法'''temp=num_list[0]*num_list[1]res_list=[]start=0end=len(num_list)-1while start!=end:tmp=num_list[start]+num_list[end]if tmp==num:temp=min(temp, num_list[start]*num_list[end])res_list.append([num_list[start], num_list[end]])if tmp<num:end-=1;else:start+=1print 'All num pairs are:', res_listprint 'min mutilple result is:', tmpif __name__ == '__main__':num_list=[35,28,25,20,19,18,17,16,15,14,13,12,10,9,8,7,6,5,4,3,2,1]num=20test_func(num_list,num)print '---------------------------------------------------------'test_func2(num_list, num)
结果如下:
All num pairs are: [[19, 1], [18, 2], [17, 3], [16, 4], [15, 5], [14, 6], [13, 7], [12, 8], [10, 10], [8, 12], [7, 13], [6, 14], [5, 15], [4, 16], [3, 17], [2, 18], [1, 19]]
min mutilple result is: 19
---------------------------------------------------------
All num pairs are: [[19, 1], [18, 2], [17, 3], [16, 4], [15, 5], [14, 6], [13, 7], [12, 8]]
min mutilple result is: 19
[Finished in 0.4s]
可以看到:
虚线上面的是暴力法,结果列表长度是简单方法的两倍正好所有的数对均出现两次,结果均正确
python求解在给定递减数组中寻找两个数和等于定值,乘积最小相关推荐
- 算法:数组中寻找两个数字的和等于固定值
数组中寻找两个数字的和等于固定值 下面为实现思路及代码 codes. // 思路 // 先进后出 两端逼近 // for example x + y = z 前置条件:z的值固定 // 故x固定 则y ...
- 链接:https://ac.nowcoder.com/acm/problem/22228来源:牛客网题目描述 在给定的数组中删除一个数。输入描述:多组测试。每组第一行输入1个整数n(n
链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 在给定的数组中删除一个数. 输入描述: 多组测试. 每组第一行输入1个整数n(n<20), 第二行输入n个整数 第三行输入1 ...
- 求数组最大数,该数为数组中某两个数相加
题目: 百度笔试:在一个正整数集合S中,找出一个最大数C,使得C=A+B,其中A和B也是S种的元素. 思想: 首先,我们将数组从小到大进行快速排序.其次: 1.将最后一个数设为最大数设定为S: 2.用 ...
- 【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。...
第 14 题(数组): 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字. 要求时间复杂度是 O(n).如果有多对数字的和等于输入的数字,输出任意 ...
- 【100题】第十四题(数组中找两个数使其和等于输入数)
一,题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是O(n).如果有多对数字的和等于输入的数字,输出任意一对即可.例如输入数组1. ...
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
原文转自:http://blog.csdn.net/u013322907/article/details/38300711 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们 ...
- 数组两个整数相加 c语言,作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)...
题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...
- 非递减数列JAVA_C语言实现两个递减数列中寻找某一个数
本文实例讲述了C语言实现两个递减数列中寻找某一个数的方法,分享给大家供大家参考之用.具体方法如下: 通常来说这道题算二分查找法中非常有难度的一题了. 题目如下: 一个数组是由一个递减数列左移若干位形成 ...
- 寻找某个数c语言,C++_C语言实现两个递减数列中寻找某一个数,本文实例讲述了C语言实现两个 - phpStudy...
C语言实现两个递减数列中寻找某一个数 本文实例讲述了C语言实现两个递减数列中寻找某一个数的方法,分享给大家供大家参考之用.具体方法如下: 通常来说这道题算二分查找法中非常有难度的一题了. 题目如下: ...
- 快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值
我觉得写得很清晰,希望没有侵犯作者的著作权,原文地址http://blog.csdn.net/hackbuteer1/article/details/6699642 快速找出一个数组中的两个数字,让这 ...
最新文章
- 二十一、二分查找算法(递归非递归)
- javaScript初学者易错点
- SVC和PendSV
- PHP安装加载yaf扩展
- python把dict转为dataframe,将python OrderedDict转换为datafram
- MySQL高级 - 案例 - AOP记录日志
- gRPC 基础概念详解
- STM32F1 GPIO工作原理初探
- python机制_python异常机制个人理解(参考网上资料)
- 做出产品不难,做好产品必须高手
- linux下好用的超级终端,【整理】Windows下超级终端的最佳替代品,免费的串口终端工具Putty...
- deepin Linux虚拟输入法,输入法 - deepin Wiki
- 0.5mm的焊锡丝能吃多大电流_【高考必备】高考物理5大类型的实验要点整理,考前一定要看!...
- Java 读取文件 MD5 sha1 sha256 sha224 sha384 sha512
- python 数据库表结构转为类_Python sql server和postgresql的表结构转换
- 在浏览器输入url回车后发生了什么
- AirTest 基本使用及框架浅剖析——五分钟上手制作游戏辅助
- FTP服务器-vsftpd
- 删除指定位置的元素(数组)
- Ubuntu20.04|最新一版的深度学习基础环境安装指导