조합
으로 인식 -> 2개를 뽑는다.class Solution {
public int maxProfit(int[] prices) {
int len = prices.length;
int ret = 0;
for(int i = 0; i < len; i++){
for(int j = i + 1; j < len; j++){
if(prices[i] < prices[j] && ret < prices[j] - prices[i] ){
ret = prices[j] - prices[i];
}
}
}
return ret;
}
}
첫 번째 시도 결과
class Solution {
public int maxProfit(int[] prices) {
int min = prices[0]; //최솟값으로 둔다.
int diff = 0; //이익의 최솟값
for(int i = 0; i < prices.length ; i++){
diff = Math.max(diff, prices[i] - min); //앞에 있는게 크면 음수가 나옴. -> 최대 profit을 구한다.
min = Math.min(prices[i], min); // min 값을 저장하고 비교 -> 최소값 교체
}
return diff;
}
}
두 번째 시도 결과
O(n)
O(1)
O(n)
O(1)
class Solution {
public int maxProfit(int[] prices) {
int len = prices.length;
int min = 100003;
int ret = 0;
int diff = 0;
for(int i = 0; i < len; i++){
if(prices[i] < min){
min = prices[i];
}
diff = prices[i] - min;
if(ret < diff){
ret = diff;
}
}
return ret;
}
}
접근 방법은 저의 풀이와 비슷하고 표현이 다른 듯 합니다.