본문 바로가기
Leetcode

496. Next Greater Element I

by YGSEO 2020. 7. 6.
728x90

Wrong Answer

class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        res = []

        for i in range(len(nums1)):
            idx = nums2.index(nums1[i])

            # error if last value in num2 == num1's some
            if nums2[-1] == nums2[idx]: # if match last value
                res.append(-1)
            elif nums2[idx] <= max(nums2[idx+1:]): # if next element is bigger
                res.append(max(nums2[idx+1:]))
            else:
                res.append(-1)

                # print(num2.index(num1[i]))
        return res

처음엔 이런식으로 풀려고 했는데 반례가 나오는 경우가 생김

Your input

[4,1,2]
[1,3,4,2]

Output

[-1,4,-1]

Expected

[-1,3,-1]

이런식으로 바로 옆의 값이 greater이면서 나머지 구간에서 max값이 아닌 경우 발생

 

class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        # nums1 is a subset of nums2
        result = []
        
        for i, n in list(enumerate(nums1)):
            ind = nums2.index(n)
            flag = False
            for i in range(ind, len(nums2)):
                if nums2[i] > n:
                    result.append(nums2[i])
                    flag = True
                    break
            if not flag:
                result.append('-1')
                
        return result

결국 for 문을 2번 돌려서 brute force 방식으로 푸는 방법이 있음

여기서 flag 사용해서 해야하는 것도 체크

 

Element 문제를 Elegant하게 푸는 방법

class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        
        stack = []
        d = {}
        
        for e in nums2:
            
            while(stack and e > stack[-1]): # if stack is not empty, and added value is greater than left
                c = stack.pop()             # pop 
                d[c] = e                    # insert dict as key=left value, value=right greater value
            
            stack.append(e)
        
        return [d.get(e, -1) for e in nums1] # get dict value from nums1, if not exist on dict then return -1

 

728x90

'Leetcode' 카테고리의 다른 글

844. Backspace String Compare  (0) 2020.07.21
682. Baseball Game  (0) 2020.07.19
1047. Remove All Adjacent Duplicates In String  (0) 2020.07.05
1441. Build an Array With Stack Operations  (0) 2020.07.01
1021. Remove Outermost Parentheses  (0) 2020.06.30

댓글