首页 > 编程语言 >每日算法题之买卖股票的最好时机(一)

每日算法题之买卖股票的最好时机(一)

时间:2022-11-13 10:00:33浏览次数:35  
标签:买卖 int length ++ 算法 ans prices 时机 minPrice

买卖股票的最好时机(一)

描述

假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益
1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天
2.如果不能获取到任何利润,请返回0
3.假设买入卖出均无手续费

解法一:暴力(常规大循环解决)

思路步骤:

最显而易见的解法,当然可能并不是最优的解法
声明变量ans=0存放最终答案
两层for循环,分别找到数组中最大的差值,表示利润最大化
比较并更新ans的值
返回ans即为答案

代码

int ans = 0;
for (int i = 0; i < prices.length; i++) {
    for (int j = i+1; j < prices.length; j++) {
        if (prices[j] - prices[i] > ans) {
            ans = prices[j] - prices[i];
        }
    }
}
return ans;

解法二:关于解法一的优化:贪心算法

思路

我们假设自己购买股票,为了达到利润最大化,必然会挑一个历史最低点进行买入,
声明最低价格minPrices
那么在第i天卖出的股票的利润就是Prices[i]-minPrices
一趟遍历记录最低点即可

代码

package esay.JZ63买卖股票的最好时机1;

public class Solution {
    /**
     * @param prices int整型一维数组
     * @return int整型
     */
    public int maxProfit(int[] prices) {
        // write code here
        //1、暴力算法
        /*int ans = 0;
        for (int i = 0; i < prices.length; i++) {
            for (int j = i+1; j < prices.length; j++) {
                if (prices[j] - prices[i] > ans) {
                    ans = prices[j] - prices[i];
                }
            }
        }
        return ans;*/

        //2、贪心算法
        int minPrice = Integer.MAX_VALUE;
        int ans = 0;
        for (int i = 0; i < prices.length; i++) {
            if (minPrice > prices[i]) {
                minPrice = prices[i];
            } else if (prices[i] - minPrice > ans) {
                ans = prices[i] - minPrice;
            }
        }
        return ans;
    }
}

标签:买卖,int,length,++,算法,ans,prices,时机,minPrice
From: https://www.cnblogs.com/loongnuts/p/16885442.html

相关文章

  • HMM算法python实现
    基础介绍,后5项为基础5元素Q=['q0','q1','q2','q3']#状态集合States,共N种状态V=['v0','v1']#观测集合Observatio......
  • 实验三:朴素贝叶斯算法实验
    实验三:朴素贝叶斯算法实验|博客班级|https://edu.cnblogs.com/campus/czu/classof2020BigDataClass3-MachineLearning||----|----|----||作业要求|https://edu.cnblogs.......
  • C++ 面经:项目常见问题 ----- nagle算法,keepalive,Linger 选项
    nagle算法应用场景:1.对于实时性要求很高的交互上,我们不能使用nagle算法,比如FPS射击类PVP对抗类游戏,或者MMO类的对实时要求很高的游戏开发来说是显而易见需要禁掉的,因为假......
  • 实验三:朴素贝叶斯算法实验
    姓名:冯莹学号:201613305【实验目的】理解朴素贝叶斯算法原理,掌握朴素贝叶斯算法框架。【实验内容】针对下表中的数据,编写python程序实现朴素贝叶斯算法(不使用sklearn包......
  • 排序函数的算法(day12)
    今天尝试了三种数字的排序法。目的为1)熟悉数组的操作2)熟悉循环笔者是做嵌入式的,不想再算法上做过多探究,自身水平和专业也不允许深入太多。现在直接给出三种排序函数。1.插值......
  • 单链表的算法
    单链表的算法先进先出单链表(尾插法)首先我们要知道什么是先进先出:每次插入的新元素,都是插在表尾。就比如饭堂打饭排队的时候,第一个打饭的人往往是第一个离开的,以此类推,最......
  • 实现泛型算法的几个方法
    #include<iostream>#include<stdio.h>#include<vector>#include<string>//Findaelementincontainerfunction////Youcanusethefunctiontofindaelementinaco......
  • 实验三:朴素贝叶斯算法实验
    【实验目的】理解朴素贝叶斯算法原理,掌握朴素贝叶斯算法框架。【实验内容】针对下表中的数据,编写python程序实现朴素贝叶斯算法(不使用sklearn包),对输入数据进行预测;熟悉s......
  • 实验三:朴素贝叶斯算法实验
    【实验目的】理解朴素贝叶斯算法原理,掌握朴素贝叶斯算法框架。【实验内容】针对下表中的数据,编写python程序实现朴素贝叶斯算法(不使用sklearn包),对输入数据进行预测;熟悉s......
  • java实现Apriori算法——频繁项集的计算
    前言《数据挖掘》:用Apriori算法求特定支持度的频繁项集。算法本身不难,java萌新我却花费了一天的时间,特此记录。算法描述我们目的是求出项数为K的频繁项集即L(K)。Apriori算......