코린이의 소소한 공부노트

[LeetCode/Easy] 2016. Maximum Difference Between Increasing Elements 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 2016. Maximum Difference Between Increasing Elements

무지맘 2023. 1. 11. 00:51

1. Input

1) 정수 배열 nums

 

2. Output

1) i<j이고 nums[i]<nums[j]인 쌍들 중에 두 요소의 차가 가장 큰 것을 찾아 그 값을 반환

2) 만약 위 조건을 만족하는 쌍이 없다면 -1을 반환

 

3. Constraint

1) 2 <= nums.length <= 1000

2) 1 <= nums[i] <= 10^9

 

4. Example

Input: nums = [7,1,5,4] -> Output: 4

Input: nums = [9,4,3,2] -> Output: -1

설명:

- i<j이고 nums[i]<nums[j]인 쌍은 (1,5), (1,4)가 있으며, 각 쌍의 요소들 간의 차는 4, 3이므로 4를 반환한다.

- i<j이고 nums[i]<nums[j]인 쌍이 없으므로 -1을 반환한다.

 

5. Code

1) 첫 코드(2022/07/13)

int dif = -1;
for(int i=0 ; i<nums.length-1 ; i++){
    if(nums[i]<nums[i+1]){
        int n = nums[i+1];
        for(int j=i+2 ; j<nums.length ; j++){
            if(n<nums[j])
                n = nums[j];
        }
        if(dif<n-nums[i]) dif = n - nums[i];
    }
} // for i

return dif;

2) 간단하게 바꾼 코드(2023/01/11)

int dif = -1;
for(int i=0 ; i<nums.length-1 ; i++){
    for(int j=i+1 ; j<nums.length ; j++){
        if(nums[i]<nums[j])
            dif = nums[j]-nums[i]>dif ? nums[j]-nums[i] : dif;
    }
} // for i

return dif;

- 변수는 1개 덜 사용해서 메모리 사용량은 줄였지만, i<j에서 nums[i]<nums[j]인 모든 nums[j]에서 dif를 계산하기 때문에 속도는 더 느렸다.