常见笔试题一
来源:互联网 发布:淘宝家具安装工挣钱 编辑:程序博客网 时间:2024/05/22 01:44
1、问题:
分析:时间复杂度O(n)
给你一个int数组,长度为n,数组中存放的是一支股票n天来的价格,请求出在哪天买入,哪天卖出的利润最大,注意只能买卖一次。
解题思路:
采取分段处理的思想。首先将购买日期nBuyTemp和卖出日期nSellTemp都初始化为第一天,在遍历数组arr的过程中,如果arr[i]大于arr[nSellTemp],那么将nSellTemp的值设置为i。如果遇到arr[I]小于arr[nBuyTemp],此时说明要开始一个新的处理分段。记录下前一个分段中nSellPrice域nBuyPrice的差值,用于与后面的分段的差值比较。
当数组是个递减数列时,就有可能出现nBuyTemp走到nSellTemp的前面,因此每次需要对这种情况进行判断。
代码中的循环次数为Len+1次,因为要处理遍历了最后一个元素后是否需要修改分段的起始位置。
解法:
<pre name="code" class="cpp">#include <stdio.h>void Decide(int* arr,const int Len,int& nBuy,int& nSell){int i = 0;int nTemp;int nBuyTemp;// 暂时的购买日期int nSellTemp;//暂时的出售日期int ans = 0;//购买差价int nBuyPrice = arr[i];//当前购买价格nBuyTemp = 0;int nSellPrice = arr[i];//当前出售价格nSellTemp = 0;i += 1;ans = nSellPrice - nBuyPrice;//当前差价for(;i<=Len;i++){nTemp = nBuyTemp;//?if(i<Len){if(arr[i]<=nBuyPrice){if((arr[nSellTemp]-arr[nBuyTemp])>ans){nBuy = nBuyTemp;nSell = nSellTemp;ans = arr[nSellTemp]-arr[nBuyTemp];nBuyPrice = nSellPrice = arr[i];}else{nBuyTemp = i;nSellTemp = i;nBuyPrice = nSellPrice = arr[i];}}if(nBuyPrice >= arr[i]){nBuyPrice = arr[i];nBuyTemp = i;}if(nSellPrice <= arr[i]){nSellTemp = i;nSellPrice = arr[i];}if(nBuyTemp > nSellTemp)nBuyTemp = nTemp;}else{if((arr[nSellTemp]-arr[nBuyTemp])>ans)//考虑数组最后一段{nBuy = nBuyTemp;nSell = nSellTemp;}}}}int main(){printf("***********Write by cb827461712************\n");int nBuy = 0;int nSell = 0;//int arr[10] = {1,3,4,2,1,5,6,8,5,3};//int arr[10] = {1,2,3,4,5,6,7,8,9,10};int arr[] = {2,1,4};//int arr[10] = {10,9,8,7,6,5,4,3,2,1};//int arr[8] = {2,3,6,4,9,0,9,10};Decide(arr,3,nBuy,nSell);printf("%d %d\n",nBuy,nSell);return 0;}
分析:时间复杂度O(n)
运行结果:
另一道类似的题见常见笔试题二
0 0
- 常见笔试题一
- 一些常见的笔试题(一)
- C常见笔试题(一)
- 笔试_常见笔试题
- zz C语言常见笔试题大全(一)
- 常见java笔试题。。。
- 线程常见笔试题
- java常见笔试题
- 常见Android笔试题
- Java常见笔试题
- C++常见笔试题
- linux常见笔试题
- 单片机常见笔试题
- 常见笔试题3
- 常见概念笔试题
- 常见笔试题二
- 常见笔试题三
- 常见嵌入式笔试题
- powerpc的linux驱动writel的疑问
- MapReduce实现倒排序索引
- LeetCode之removeDuplicates
- 一个fork的面试题
- java中的socket编程的入门源码
- 常见笔试题一
- 被包围的棋子 Surrounded Regions
- 如何注册installshield 12
- 用rewind函数使位置指针指向文件头
- Boost.Asio 介绍--之二
- 在ASP.NET MVC 中获取当前URL、controller、action
- mysql优化整理
- ef linq PWDENCRYPT
- 一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(一)---基本设置