首页 > 试题广场 >

计算最大获益时机 【题目描述】 假设你能

[问答题]

计算最大获益时机


【题目描述】

假设你能重返过去,现在让你回到2015年,你能选择一支股票进行投资,你拥有这支股票未来n天的价格走势图,为了躲避证监会的监控,你只有一次买入卖出机会。现在要求实现一个程序计算哪天买入哪天卖出能获得最大收益。

输入

第一行为天数n

接下来n行 为数组的n个整数元素,代表第n天该股票的价格

输出

输出为b,s      #代表第b天买入,第s天卖出

天数从0开始

如果没有适合的买入卖出输出-1,-1

同样收益时越晚买入越早卖出更符合需要

样例输入

5

2

1

4

5

3

样例输出

1, 3

function searchBig(arr) {
        var min = 0,
            max = 0,
            buyIn= 0,
            max_profit = 0,
            length = arr.length;
        for (var i = 1; i < length; i++) {
            if (max_profit < arr[i] - arr[min]) {
                max_profit = arr[i] - arr[min];
                buyIn = min;
                max = i;
            }
            if (arr[i] < arr[min]) {
                min = i;
            }

        }
        console.log("第" + (buyIn || max ? buyIn : -1) + "天买入,第" + (buyIn || max ? max : -1) + "天卖出");
    }
发表于 2018-07-03 10:26:54 回复(0)
<script> function biggest(){ if( arguments[0]!==arguments.length-1){ return false;} var b=0,s=0,max=0; for(var i=0;i<arguments[0];i++){ for(var j=i+1;j<arguments[0];j++){ if(max<(arguments[j]-arguments[i])){ b=i; s=j; max=arguments[j]-arguments[i]; } } } alert("第"+(b-1)+"买入,第"+(s-1)+"卖出"); } biggest(5,2,1,4,5,3); </script>
发表于 2017-08-19 14:32:57 回复(0)
void  search(vector<int > num,int & In,int& out){
     int min=num[0]; //初始化买入最低价
     int buyIn=min;  //买入最低价
     int buyOut=0;   //卖出最高价
     int max_profit=-1; //最大利润
     int profit=0;      //当前利润
     for(int i=1;i<num.size();i++){
         profit=num[i]-min;
         if(profit>max_profit)
         {
             max_profit=profit;
             buyIn=min;
             buyOut=num[i];
         }
         if(num[i]<min)
         {
             min=num[i];
         }
     }
         In=buyIn;
         out=buyOut;
 }
编辑于 2018-03-30 12:32:51 回复(0)
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  // Write your code here
  while ((line = await readline())) {
    let length = parseInt(line);
    let list = []
    for(let i = 0;i < length;i++) {
      list.push(parseInt(await readline()))
    }
    console.log(`${findMax(list)[0]},${findMax(list)[1]}`);
  }

  function findMax(arr) {
    let max = 0;
    let result = [-1,-1];

    for (let i = 0; i < arr.length - 1; i++) {
      for (let j = i + 1; j < arr.length; j++) {
        if (arr[j] - arr[i] > max) {
          max = arr[j] - arr[i];
          result = [i, j]
        }
      }
    }
    return result;
  }
})();
编辑于 2023-04-13 20:43:06 回复(0)
import java.util.Scanner;

public class test05 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n;
        n = sc.nextInt();
        int arr[] = new int[n];
        int min,max;

        for (int i = 0;i<arr.length;i++){
            arr[i] = sc.nextInt();
        }
        test05 main = new test05();
        min = main.findMin(arr);
        max = main.findMax(arr);

        System.out.println(min+","+max);

    }

    public int findMin(int[] a) {
        int len = a.length;
        if (len == 0){
            return -1;
        }
        int min = a[0];
        int i;
        for (i = 1; i < len; i++) {
            if (min >= a[i]) {
                min = a[i];
            }
        }
        return i;
    }

    public int findMax(int[] a){
        int len = a.length;
        if (len == 0){
            return -1;
        }
        int max = a[0];
        int j;
        for (j=1;j<len;j++){
            if (max <=a[j]){
                max = a[j];
            }
        }
        return j;
    }
}


发表于 2021-09-07 16:15:43 回复(0)
def getmaxprofit(l):
    res = 0
    b = -1  # buy
    s = -1  # sell
    if not l:
        return b, s
    for i in range(len(l)):
        for j in range(len(l)-1,i-1,-1):
            if (l[j]-l[i]) >= res:  # >= means buy later
                res = l[j]-l[i]
                b = i
                s = j
    if b == s:
        return -1, -1
    return b, s
def getmaxprofit1(l):
    if not l:
        return -1, -1
    b = l[0]  # buy
    s = l[0]  # sell
    bi = 0
    si = 0
    for i in range(len(l)):
        if l[i] <= b:
            b = l[i]
            bi = i
        if l[i] >= b:
            s = l[i]
            si = i
    if b == s:
        return -1, -1
    return bi, si
if __name__ == "__main__":
    s = []
    le = int(raw_input())
    for i in range(le):
        s.append(int(raw_input()))
    print getmaxprofit(s)[0],',',getmaxprofit(s)[1]
    print getmaxprofit1(s)[0],',',getmaxprofit1(s)[1]

发表于 2018-04-20 22:20:20 回复(0)
int main()
{
    int count, n;
    cin >> count;
    vector<int> v;
    for (int i = 0; i < count; i++)
    {
        cin >> n;
        v.push_back(n);
    }
    
    int  minPrice = v.front();
    int inDay = 0, outDay = 0, minDay = 0;
    int profit = 0, maxProfit = 0;
    for (int i = 1; i < v.size(); i++)
    {
        profit = v[i] - minPrice;
        if (profit > maxProfit)
        {
            maxProfit = profit;
            inDay = minDay;
            outDay = i;
        }
        if (v[i] < minPrice)
        {
            minDay = i;
            minPrice = v[i];
        }
    }
    cout << inDay << " " << outDay << endl;

    return 0;
}

发表于 2018-04-19 19:40:55 回复(0)
import java.util.Scanner;
public class Profit {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Scanner sc=new Scanner(System.in);
        int[] arr=new int[sc.nextInt()];
        for(int i=0;i<arr.length;i++) {
            arr[i]=sc.nextInt();
        }
        int min=arr[0];
        int profit1=-1;
        int profit2=-1;
        int max=arr[0];
    
        for(int j=0;j<arr.length;j++) {
            if(arr[j]<=min) {
                min=arr[j];
            }
            for(int k=j+1;k<arr.length-1;k++) {
                if(arr[k]<arr[k+1]) {
                    max=arr[k+1];
                }
            }
        }
        profit1=max-min;
        for(int j=1;j<arr.length;j++) {
            if(arr[j]>max) {
                max=arr[j];
            }
        }
        for(int k=1;k>=1;k--) {
            if(arr[k]>arr[k-1]) {
                min=arr[k-1];
            }
        }
        profit2=max-min;
        if(profit1>profit2) {
            System.out.println("最大利益:"+profit1);
        }else {System.out.println("最大利益:"+profit2);}
    }

}

发表于 2018-04-03 13:01:02 回复(3)
暴力可以吗?

发表于 2018-03-16 17:09:57 回复(0)
求最小值,再求最大值
发表于 2018-03-08 11:05:13 回复(0)
import java.util.Scanner; public class Proc1 { public static void main(String[] args) { // TODO Auto-generated method stub int b=0,s=0,max=0,temp; Scanner input = new Scanner(System.in); int n = input.nextInt(); int[] array = new int[n]; for(int i = 0;i&lt;n;i++) { array[i] = input.nextInt(); //System.out.println('\n'); } input.close(); int i,j,m=1; while(m&lt;n) { for(i=0;i&lt;m;i++) { for(j=m;j&lt;n;j++) { temp = array[j]-array[i]; if(max&lt;=temp) { max = temp; b = i; s = j; } } } m++; if(max<=0) { b = -1; s = -1; } } System.out.print(b + &quot; &quot; + s); } }
编辑于 2018-02-09 13:44:09 回复(0)
void Get(int[] prices, out int bd, out int sd){ int low,high=prices[0]; int i=1; int diff; foreach(int price in prices){ if(price<low) { if(high-price>diff) { low = price ; diff = high - low; bd = i; } } else if(price > high) { high = price; sd = price; } i++; } } }
发表于 2017-09-18 23:00:11 回复(0)
function biggest(){
      if (arguments[0] !== arguments.length - 1) {
        return false;
      }
      var max = 0,
          difference = 0,
          start = 0,
          end = 0;
      for(var i = 1; i < arguments.length - 1; i++) {
        for(var j = i+1; j < arguments.length; j++) {
          if (max === (arguments[j] - arguments[i]) && difference > j - i) {
            start = i;
            end = j;
            difference = j - i;
          }
          if (max < arguments[j] - arguments[i]) {
            max = arguments[j] - arguments[i];
            start = i;
            end = j;
            difference = j - i;
          }
        }
      }
      console.log('第'+start+"天买进,第"+end+'天卖出可获得最大收益'+max);
    }
    biggest(5,2,1,4,5,3)
发表于 2017-08-18 13:05:44 回复(0)