[lleetcode 121. Best Time to Buy and Sell Stock]|week 16

来源:互联网 发布:网络歌曲 老公你辛苦了 编辑:程序博客网 时间:2024/05/17 04:40
  1. Best Time to Buy and Sell Stock

一、题目

Say you have an array for which the ith element is the price of a given stock on day i.
If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.
Example 1:
Input: [7, 1, 5, 3, 6, 4]
Output: 5

max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)
Example 2:
Input: [7, 6, 4, 3, 1]
Output: 0

In this case, no transaction is done, i.e. max profit = 0.

二、代码

代码:

class Solution {public:    int maxProfit(vector<int>& prices)     {        if (prices.size()==0)        return 0;        int profit=0;        int small=prices[0];        for (int i=0;i<prices.size()-1;i++)        {            if (prices[i]<small)            small=prices[i];            int tmp=prices[i+1]-small;            if (tmp>profit)            profit=tmp;        }        return profit;    }};

三、思路

要有利润必须先买入再卖出,因为每天只可以操作一次所以卖出的日期最少在买入的后一天,故遍历一遍向量,判断第i天是否为目前为止最小值,是则替换,同时i+1天减去最小值判断是否为目前为止最大利润,是则替换。因为寻找最小值与计算利润在同一遍历过程所以空间复杂度与时间复杂度为O(n).

  1. Count Primes
    Description:
    Count the number of prime numbers less than a non-negative number, n.

代码:
class Solution {
public:
int countPrimes(int n) {
int count=0;
if (n<=2)
return 0;
if (n<=3)
return 1;
if (n<=5)
return 2;
vector primes;
primes.push_back(3);
for (int i=5;i

原创粉丝点击