Largest product from 3 integers
On-Site Question 1 - SOLUTION
Problem
Given a list of integers, find the largest product you could make from 3 integers in the list
Requirements
You can assume that the list will always have at least 3 integers
Paper/pencil only, don't code this out until you've solved it as far as you can by hand.
Solution
We can solve this problem in O(n) time with O(1) space, we should also be able to take into account negative numbers, so that a list like: [-5,-5,1,3] returns (-5)(-5)(3) = 75 as its answer.
Hopefully you've begun to realize the similarity between this problem and the Amazon stock problem from the E-Commerce Company mock interview questions! You could brute force this problem by just simply trying every single combination of three digits, but this would require O(n^3) time!
How about we use a greedy approach and keep track of some numbers. In the stock problem we kept track of max profit so far, in this problem we are actually going to keep track of several numbers:
- The highest product of 3 numbers so far
- The highest product of 2 numbers so far
- The highest number so far
Since we want to keep negative numbers in account, we will also keep track of the lowest product of two and the lowest number:
- The lowest product of 2
- The lowest number
Once we iterate through the list and reach the end we will have the highest posiible product with 3 numbers. At each iteration we will take the current highest product of 3 and compare it to the current integer multiplied by the highest and lowest products of 2.
Let's see this coded out:
def solution(lst): # Start at index 2 (3rd element) and assign highest and lowest
# based off of first two elements # Highest Number so far
high = max(lst[0],lst[1]) # Lowest number so far
low = min(lst[0],lst[1]) # Initiate Highest and lowest products of two numbers
high_prod2 = lst[0]*lst[1]
low_prod2 = lst[0]*lst[1] # Initiate highest product of 3 numbers
high_prod3 = lst[0]*lst[1]*lst[2] # Iterate through list
for num in lst[2:]: # Compare possible highest product of 3 numbers
high_prod3 = max(high_prod3,num*high_prod2,num*low_prod2) # Check for possible new highest products of 2 numbers
high_prod2 = max(high_prod2,num*high,num*low) # Check for possible new lowest products of 2 numbers
low_prod2 = min(low_prod2,num*high,num*low) # Check for new possible high
high = max(high,num) # Check for new possible low
low = min(low,num) return high_prod3
l = [99,-82,82,40,75,-24,39, -82, 5, 30, -25, -94, 93, -23, 48, 50, 49,-81,41,63] solution(l)
763092
Great! Through the use of a greedy approach we have been able to complete the problem in O(n) time. Keep this sort of approach in mind when you have to iterate through a list and a brute force solution is on the order of an exponential!
Good Job!
Largest product from 3 integers的更多相关文章
- projecteuler Problem 8 Largest product in a series
The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = ...
- Largest product in a grid
这个比前面的要复杂点,但找对了规律,还是可以的. 我逻辑思维不强,只好画图来数数列的下标了. 分四次计算,存入最大值. 左右一次,上下一次,左斜一次,右斜一次. In the 2020 grid be ...
- Largest product in a series
这个我开始理解错了,算错了. 我以为是求连续5个数的最大值,结果,是连接5个数相乘的最大值. 英语不好,容易吃亏啊. Find the greatest product of five consecu ...
- R语言学习——欧拉计划(11)Largest product in a grid
Problem 11 In the 20×20 grid below, four numbers along a diagonal line have been marked in red. 08 0 ...
- 【Project Euler 8】Largest product in a series
题目要求是: The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × ...
- Problem 8: Largest product in a series
先粘实现代码,以后需要再慢慢补充思路 s = ''' 73167176531330624919225119674426574742355349194934 9698352031277450632623 ...
- Project Euler 11 Largest product in a grid
题意:在这个20×20方阵中,四个在同一方向(从下至上.从上至下.从右至左.从左至右或者对角线)上相邻的数的乘积最大是多少? 思路:暴力去枚举以 ( x , y ) 为中心拓展的四个方向 /***** ...
- Project Euler 8 Largest product in a series
题意:寻找这 1000 个数中相邻 13 个数相乘积最大的值 思路:首先想到的是暴力,但是还可以利用之前记录过的数值,什么意思呢?即在计算 2 - 14 后,再计算 3 - 15 时完全可以利用之前计 ...
- Maximum Product Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
随机推荐
- jenkins坑—— shell 命令返回空导致构建失败
今天用jenkins做CI遇到个坑,命令为:isSnapshot=`ls|grep isv-osp-service|grep -i snapshot` ls命令返回空的话,Jenkins构建就直接失败 ...
- 5.15 python 面向对象的软件开发&领域模型
1.面向对象的软件开发 参考地址::http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label14 面向对象的软件工程包括下面几个部: ...
- ubuntu16.04设置电池充电阈值
thinkpad在安装ubuntu16.04之后,设置充电阈值: 方法一: 使用双系统,在windows下使用联想的Lenovo setting center设置之后,在ubuntu之下也可以保持相同 ...
- 树莓派3用create_ap变身无线AP
1.git clone https://github.com/oblique/create_ap.git2.cd create_ap3.sudo make install就这样安装好了4.接下来安装依 ...
- TEXT 6 Travelling with baggage
TEXT 6 Travelling with baggage 背着行囊去旅行 Feb 16th 2006 From The Economist print edition (1)FEW modern ...
- JAVA数组详解
package com.keke.demo; import java.text.ParseException;import java.text.SimpleDateFormat;import java ...
- 提交给mysql java驱动的优化下个版本要发布了^_^
Unsubscribe from updates to this bug at: https://bugs.mysql.com/77681 Updated by: Daniel che chung S ...
- pymongo CursorNotFound错误
部分报错如下: File "D:\anaconda\lib\site-packages\pymongo\cursor.py", line 1189, in next if len( ...
- linux 用户管理(3)----查看用户登录时间以及命令历史
1.查看当前登录用户信息 who命令: who缺省输出包括用户名.终端类型.登陆日期以及远程主机. who /var/log/wtmp 可以查看自从wtmp文件创建以来的每一次登陆情况 (1)-b:查 ...
- 关于空指针NULL、野指针、通用指针
http://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了.假设 ...