2024. 3. 30. 01:15ㆍ코딩 테스트(JAVA)/리트코드
https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/
You are given an array prices where prices[i] is the price of a given stock on the ith day.
주어진 배열 prices에서 prices[i]는 i번째 날의 특정 주식 가격입니다.
You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.
하나의 주식을 사는 날과 미래의 다른 날에 그 주식을 판매하는 것으로 이익을 극대화하고자 합니다.
Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.
이 거래로 얻을 수 있는 최대 이익을 반환하시고 만약 이익을 얻을 수 없는 경우에는 0을 반환하세요.
Example 1:
Input: prices = [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.
Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell.
Example 2:
Input: prices = [7,6,4,3,1]
Output: 0
Explanation: In this case, no transactions are done and the max profit = 0.
Constraints:
1 <= prices.length <= 105
0 <= prices[i] <= 104
접근 방법
시간 복잡도: O(N)
1. 임시적으로 minPrice를 prices[0]으로 설정합니다.
2. 만약 이익을 얻을 수 없는 경우에는 0을 반환해야하므로 maxProfit의 초기값을 0으로 설정합니다.
3. 만약 현재 prices[i]가 minPrice보다 작다면 minPrice를 해당 prices[i]로 업데이트합니다.
4. maxProfit보다 현재 prices[i] - minPrice가 더 크다면, 더 큰 maxProfit이 나온 것이므로 해당 값으로 갱신합니다.
코드 구현
class Solution {
public int maxProfit(int[] prices) {
int minPrice = prices[0];
int maxProfit = 0;
for(int i=0; i<prices.length; i++){
if(prices[i] < minPrice){
minPrice = prices[i];
}else if(prices[i] - minPrice > maxProfit){
maxProfit = prices[i] - minPrice;
}
}
return maxProfit;
}
}
'코딩 테스트(JAVA) > 리트코드' 카테고리의 다른 글
[문제14][LeetCode] 21. 두 정렬 리스트의 병합 (1) | 2024.04.06 |
---|---|
[문제13][LeetCode] 234. 팰린드롬 연결 리스트 (0) | 2024.04.04 |
[문제11][LeetCode] 238. 자신을 제외한 배열의 곱 (0) | 2024.03.29 |
[문제10][LeetCode] 561. 배열 파티션 I (0) | 2024.03.29 |
[LeetCode] 1091. Shortest Path in Binary Matrix (0) | 2024.01.24 |