Web前端面试真题(算法篇):005篇
2023-09-14 09:02:35 时间
股票最大利润
假设有一个数组, 它的第i个元素对应第i天的价格
最多只允许完成一次交易(买进一次,卖出一次)
设计一个算法找出最大利润
例如: [7,1,5,3,6,4] 最大利润 5
function maxIncome(prices) {
var 收益值 = 0;
var 买入时间 = 0;
var 最大收益 = 0;
for(var i = 1; i < prices.length; i++) {
//假设我们从第一天买入,收益为0, 循环从1开始,第二天计算收益
//当前收益值
收益值 = prices[i]-prices[买入时间];
//若当前收益出现负数或0,则意味着有比买入价更低的价格出现
//我们开始计算下一个买入时间点
if(收益值<=0) 买入时间=i;
//每次都将更大的收益保留
//若没有出现更大的收益,则不做更新
//最终,最大收益会被保留下来
if(收益值>=最大收益) 最大收益=收益值;
/*
唯一不足之处,是不太容易记录买入和卖出时机。
*/
}
return 最大收益;
}
console.log( maxIncome([7,1,5,3,6,4]) );
如果这个计算方法你不是非常能理解, 我们再来换一个简单一点的思路
function maxIncome(prices) {
var 最大收益 = 0;
for(var i = 0; i < prices.length-1; i++) {
for(var j = i+1; j < prices.length; j++) {
//就是穷举每个买入及卖出的差价
var 收益值 = prices[j] - prices[i];
if(收益值>=最大收益) 最大收益 = 收益值;
}
}
return 最大收益;
}
console.log( maxIncome([7,1,5,3,6,4]) );
这个思路虽然简单, 但浪费了很多计算次数
优化改良之后, 就是开头的版本了
相关文章
- java实现Floyd算法
- Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- 程序员必须知道的10大基础实用算法及其讲解 - WEB开发者
- 贪心算法题目汇总
- C语言实现粒子群算法(PSO)二
- Apache Spark源码走读(十一)浅谈mllib中线性回归的算法实现&Spark MLLib中拟牛顿法L-BFGS的源码实现
- [算法] 冒泡排序
- 【操作系统笔记03】操作系统之进程的死锁、内存分配和回收、内存动态分配算法
- ML之LassoR&RidgeR:基于datasets糖尿病数据集利用LassoR和RidgeR算法(alpha调参)进行(9→1)回归预测
- NLP之TM之LDA:利用LDA算法瞬时掌握文档的主题内容—利用希拉里邮件数据集训练LDA模型并对新文本进行主题分类
- 【经验分享】统计学算法大全及方法适用场景(必看)
- k-近邻算法
- 【ChatGPT】《ChatGPT 算法原理与实战》1: 引言:从 CNN、RNN 到 Transformers 架构、自注意力机制(图文+数学公式+代码实例详解)
- KMP算法
- 数据结构与算法——插入类排序(直接插入排序,希尔排序)
- xgboost 算法总结