《剑指offer》第六十三题(股票的最大利润)
// 面试题63:股票的最大利润
// 题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖交易该股
// 票可能获得的利润是多少?例如一只股票在某些时间节点的价格为{9, 11, 8, 5,
// 7, 12, 16, 14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能
// 收获最大的利润11。 #include <iostream>
//如果从头到尾遍历所有的数对,时间复杂度O(n^2),显然不够好
//若固定一个值,直接找前面的最小值,这样更好 int MaxDiff(const int* numbers, unsigned length)
{
if (numbers == nullptr && length < )//边界判断
return ; int min = numbers[];//记住当前值前的数组的最小值,初始化为第一个数
int maxDiff = numbers[] - min;//记住遍历的每个数与它之前最小值之间的差的最大值 for (int i = ; i < length; ++i)//遍历每个数
{
if (numbers[i - ] < min)//对变量min,检测是否是当前数组最小值
min = numbers[i - ]; int currentDiff = numbers[i] - min;//计算当前利润
if (currentDiff > maxDiff)
maxDiff = currentDiff;//更新maxDiff
} return maxDiff;
} // ==================== Test Code ====================
void Test(const char* testName, const int* numbers, unsigned int length, int expected)
{
if (testName != nullptr)
printf("%s begins: ", testName); if (MaxDiff(numbers, length) == expected)
printf("Passed.\n");
else
printf("FAILED.\n");
} void Test1()
{
int numbers[] = { , , , , };
Test("Test1", numbers, sizeof(numbers) / sizeof(int), );
} // 价格递增
void Test2()
{
int numbers[] = { , , , , , };
Test("Test2", numbers, sizeof(numbers) / sizeof(int), );
} // 价格递减
void Test3()
{
int numbers[] = { , , , , , };
Test("Test3", numbers, sizeof(numbers) / sizeof(int), -);
} // 价格全部相同
void Test4()
{
int numbers[] = { , , , , };
Test("Test4", numbers, sizeof(numbers) / sizeof(int), );
} void Test5()
{
int numbers[] = { , , , , , , , };
Test("Test5", numbers, sizeof(numbers) / sizeof(int), );
} void Test6()
{
int numbers[] = { , };
Test("Test6", numbers, sizeof(numbers) / sizeof(int), );
} void Test7()
{
int numbers[] = { , };
Test("Test7", numbers, sizeof(numbers) / sizeof(int), -);
} void Test8()
{
Test("Test8", nullptr, , );
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
Test7();
Test8();
system("pause");
return ;
}
《剑指offer》第六十三题(股票的最大利润)的更多相关文章
- 《剑指offer》第十三题(机器人的运动范围)
// 面试题:机器人的运动范围 // 题目:地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它 // 每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和 // ...
- 《剑指offer》第二十三题(链表中环的入口结点)
// 面试题23:链表中环的入口结点 // 题目:一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中, // 环的入口结点是结点3. #include <iostream> ...
- 《剑指offer》面试题63. 股票的最大利润
问题描述 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = ...
- 剑指Offer(三十三):丑数
剑指Offer(三十三):丑数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baidu_31 ...
- 剑指Offer(二十三):二叉搜索树的后序遍历序列
剑指Offer(二十三):二叉搜索树的后序遍历序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 剑指offer第六章
剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1 ...
- [持久更新] 剑指offer题目Python做题记录
第一题 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:先快速定位到 ...
- 【剑指Offer】俯视50题之21 - 30题
面试题21包括min函数的栈 面试题22栈的压入.弹出序列 面试题23从上往下打印二叉树 面试题24二叉搜索树的后序遍历序列 面试题25二叉树中和为某一值的路径 面试题26复杂链表的复制 ...
- 算法学习之剑指offer(六)
题目1 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. import java.util.*; public cl ...
- 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
随机推荐
- BeanUtils工具的使用
beanutils的下载地址:http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi 该压缩包有测试的代码: ...
- SVN更新无数次后仍显示Out of date
理器相集成的TortoiseSVN更是方便. 但有时候在提交修改后的文件时,却莫名其妙的出现out of date错误,导致工程无法commit,即使将新文件删了重新update,然后再在旧文件上作修 ...
- Idea 破解教程 (2018.11-29最新版)
一.下载安装idea,这里不做赘述.官网-https://www.jetbrains.com/idea/ 二.安装完idea后,需要激活使用.这里需要先下载个工具包 ,下载网址http://idea. ...
- 20145212罗天晨 WEB基础实践
实验问题回答 1.什么是表单 表单在网页中主要负责数据采集功能 一个表单有三个基本组成部分: 表单标签 表单域:包含了文本框.密码框.隐藏域.多行文本框.复选框.单选框.下拉选择框和文件上传框等 表单 ...
- 20145221高其_Final
20145221高其_Final 免考题目 密码保密与信息安全大赛--网络攻防 免考内容 CTF简介 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人 ...
- 使用svn导入项目
打开eclipse工作平台点击“File”-->import如下图: 在项目导入框中找到SVN选择“从SVN检出项目”然后点击“下一步”,出现如下界面: 在上图界面中选择“创建新的资源库 ...
- SSM集成activiti6.0错误集锦(一)
项目环境 Maven构建 数据库:Orcle12c 服务器:Tomcat9 <java.version>1.8</java.version> <activiti.vers ...
- linux内核中的两个标记GFP_KERNEL和GFP_ATOMIC是用来干什么的?
1. 作用 用来标记分配内核空间内存时的方式 2. 两个标记使用在什么场合? 如果内存不够时,会等待内核释放内存,直到可以分配相应大小的内存,也就意味着会发生阻塞,因此不能使用在中断处理函数中,而GF ...
- NRF24L01模块配置
发射数据时: (1)首先将nRF24L01配置为发射模式 (2)接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低 ...
- (转载)用C#实现MySQL建库及建表
最近做一个项目,为了方便用户使用,希望可以在系统初始化的时候,自动实现MySQL数据库的建库和建表操作.在网上查了很多资料都没有找到合适的,偶尔在一个国外网站上看到了相关的内容,特把实现方法整理如下: ...