// 面试题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》第六十三题(股票的最大利润)的更多相关文章

  1. 《剑指offer》第十三题(机器人的运动范围)

    // 面试题:机器人的运动范围 // 题目:地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它 // 每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和 // ...

  2. 《剑指offer》第二十三题(链表中环的入口结点)

    // 面试题23:链表中环的入口结点 // 题目:一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中, // 环的入口结点是结点3. #include <iostream> ...

  3. 《剑指offer》面试题63. 股票的最大利润

    问题描述 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = ...

  4. 剑指Offer(三十三):丑数

    剑指Offer(三十三):丑数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baidu_31 ...

  5. 剑指Offer(二十三):二叉搜索树的后序遍历序列

    剑指Offer(二十三):二叉搜索树的后序遍历序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...

  6. 剑指offer第六章

    剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1 ...

  7. [持久更新] 剑指offer题目Python做题记录

    第一题 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:先快速定位到 ...

  8. 【剑指Offer】俯视50题之21 - 30题

    面试题21包括min函数的栈  面试题22栈的压入.弹出序列  面试题23从上往下打印二叉树  面试题24二叉搜索树的后序遍历序列  面试题25二叉树中和为某一值的路径  面试题26复杂链表的复制  ...

  9. 算法学习之剑指offer(六)

    题目1 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. import java.util.*; public cl ...

  10. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

随机推荐

  1. ssh客户端连接报认证失败

    最近有个应用在并发导出的时候,报错了ssh认证失败,原来串行的时候都正常,经查,可能是ssh连接数不够的原因,这个问题刚好之前有个java开发反馈过,linux默认的ssh连接数为10个. 解决如下: ...

  2. Angular4.X 介绍

    Angular4.X 介绍 写在前面 为什么突然有想学习一点 angular 的知识呢?因为前几天突然在头条看到一个帖子,说,现在JavaScript成功的干过Java成为最火的编程语言,而JavaS ...

  3. 02:MongoDB操作

    1.1 MongoDB 增加 1.插入数据 1. 插入文档: insert 如果插入数据的时候,collection还不存在,自动创建集合 2. insertOne: 插入一条数据 3. insert ...

  4. Codeforces 903G Yet Another Maxflow Problem - 线段树

    题目传送门 传送门I 传送门II 传送门III 题目大意 给定一个网络.网络分为$A$,$B$两个部分,每边各有$n$个点.对于$A_{i} \ (1\leqslant i < n)$会向$A_ ...

  5. 【Python047-魔法方法:定制序列】

    一.协议是什么 1.协议(protocols)与其他编程语言中的接口很相似,它规定你那些方法必须要定义.然而在Python中协议就显的不那么正式,事实上,在Python中,协议更像是一种指南 2.容器 ...

  6. Oracle错误——SP2-0734: 未知的命令开头 "imp C##sin..." - 忽略了剩余的行。

    错误 在windows的DOS窗口下使用命令导入Oracle数据. 原因 进入sqlplus里是不能执行imp的(sqlplus不认识imp),imp 是个工具,应该在cmd的dos命令提示符下执行.

  7. git如何将一个分支合并到另一个分支?

    答: git merge --no-edit <another branch>

  8. Docker 使用Dockerfile构建redis镜像

    Dockerfile实现: FROM centos: MAINTAINER hongdada "hongdaqi159505@gmail.com" WORKDIR /home RU ...

  9. SpringCloud与Consul集成实现负载均衡

    一.背景 SpringCloud微服务目前比较流行,其中大都在使用的服务注册与发现是Eureka,最近研究了Consul的集群搭建,现使用Consul实现服务的负载均衡.其主要拓扑结构如下: 二.Co ...

  10. 【ContextLoaderListener】Web项目启动报错java.lang.ClassNotFoundException: ContextLoaderListener

    错误原因: 进入到tomcat的部署路径.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\下检查了一下,发现工程部署后在WE ...