Лучшее время для покупки и продажи акций

Сегодня мы рассмотрим одну из основных проблем массива,

Для решения задачи «Лучшее время для покупки и продажи акций» нам нужно найти лучший день для покупки (низкая цена) и лучший день для продажи (высокая цена), чтобы получить максимальную прибыль.

Правило простое, мы не можем продавать без покупки, т.е. продажа должна быть после покупки.

Давайте решим эту задачу с помощью java и dart.

Java

public class StockBuyAndSell {
  public static void main(String[] args) {
    int[] prices = new int[] {7, 1, 5, 3, 6, 4};
    int rightIndex=0;
    int min = Integer.MAX_VALUE;
    int maxProfit = 0;
    while(rightIndex<prices.length){
        if(prices[rightIndex]<min){
            min=prices[rightIndex];
        }
        maxProfit = Math.max(maxProfit,prices[rightIndex]-min);
        rightIndex++;
    }
    System.out.println(maxProfit);
  }
}
Вход в полноэкранный режим Выход из полноэкранного режима

здесь у нас есть список цен на акции int[] prices = new int[] {7, 1, 5, 3, 6, 4};

создадим указатель int rightIndex=0, создадим min с Integer.MAX_VALUE и maxProfit с нулем

мы будем итерировать массив от первого до последнего (цикл for, цикл while, что угодно), идея заключается в том, что нам нужно найти минимальное значение в массиве, затем мы найдем разницу между минимальным и текущим элементом, и мы использовали Math.Max(), чтобы найти, является ли текущая разница максимальной прибылью или предыдущей, и, наконец, мы выводим maxProfit.

Dart

 import 'dart:math';
  void main(){
    List<int> price = [7,1,5,3,6,4];
    int min=double.maxFinite.toInt();
    int maxProfit=0;
    for(int i=0;i<price.length;i++){
      if(min>price[i]){
        min=price[i];
      }
      maxProfit = max(maxProfit, price[i]-min);
    }
    print(maxProfit);
  }
Вход в полноэкранный режим Выход из полноэкранного режима

В Dart у нас нет значений min и max для int, поэтому мы использовали double и преобразовали его в int.

Временная сложность:- O(n)
Вспомогательная сложность:- O(1)

Оцените статью
devanswers.ru
Добавить комментарий