반응형

[LeetCode, 리트코드] Best Time to Buy and Sell Stock

반응형


1. Problem

 

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 (i.e., buy one and sell one share of the stock), design an algorithm to find the maximum profit.

Note that you cannot sell a stock before you buy one.

Example 1:

Input: [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 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
Explanation: In this case, no transaction is done, i.e. max profit = 0.


2. Solution


주식값 중 가장 싸게 사서 가장 비싸게 팔아 최대 이익이 발생하는 값을 구하는 문제다. 키포인트는 가장 싼 값에 산 인덱스를 갱신하는 것은 왼쪽부터 시작하므로 무리없이 갱신 가능하지만 비싼 값에 팔려고 시도하는 인덱스는 가장 싼 값에 팔려는 인덱스보다 더 커야한다. 


 

3. Code


class Solution {
public int maxProfit(int[] prices) {

int min_idx = 987654321;
int max_idx = -1;
int max_profit = 0;


for(int i=0; i<prices.length; ++i){

if(min_idx == 987654321 || prices[i] < prices[min_idx]){
min_idx = i;
}

if(max_idx == -1 || prices[i] > prices[min_idx]){
max_idx = i;
}

if(min_idx < max_idx){
max_profit = Math.max(max_profit, prices[max_idx] - prices[min_idx]);
}
}

return max_profit;
}
}


반응형

이 글을 공유하기

댓글

Designed by JB FACTORY