“教你如何炒股就能挣大钱”---1

来自LeetCode
解法1:暴力解法
双重循环,第一重遍历整个数组,第二重遍历第一重循环之后的所有数据,定义一个最大收益初始值为0,每次作差,如果收益比max大则赋值。

class Solution {
    public int maxProfit(int[] prices) {
    int len=prices.length;
        if(len==0)return 0;  //base case
        int max=0;  
        //初始值为0的意义就是如果股票价格单调递减,那么直接返回0
       for(int i=0;i<len;i++){
          for(int j=i+1;j<len;j++){
          int cur=prices[j]-prices[i];
              if(cur>max){  //比较替换
              max=cur;
              }
          }
       }
       return max;
    }
}
时间复杂度o(n^2

解法2:暴力之后肯定就是想着优化时间复杂度,将时间复杂度降为o(n),理逻辑试着一遍循环就求出结果。
遍历时记录前i天的最小值,如果当前比这个最小值还要小那么就直接赋值否则就计算当天和记录的最小值的差,再拿这个差与max比较,大则替换。这样就只要遍历一次啦

class Solution {
    public int maxProfit(int[] prices) {
        if(prices.length==0)return 0;//base case
        int max=0;  
       int min=Integer.MAX_VALUE; //初始值设置为int上限
       for(int i=0;i<prices.length;i++){
           int cur;//避免两次进行计算
              if(prices[i]<min){
                  min=prices[i];
              }else if((cur=prices[i]-min)>max){//避免无用的计算
                  max=cur;
              }
       }
       return max;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值