【代码随想录二刷】day 59 | 503.下一个更大元素II & 42. 接雨水

二刷主要记录理解不一样的题

一刷地址:day59

今日题目:中等

下一个更大元素II

class Solution {
    public int[] nextGreaterElements(int[] nums) {
        int n = nums.length;
        int[] ans = new int[n];
        Arrays.fill(ans, -1);
        Deque<Integer> st = new ArrayDeque<>();
        for(int i = 0; i < 2*n - 1; i++){
            int pos = i % n;
            while(!st.isEmpty() && nums[pos] > nums[st.peek()]){
                int idx = st.poll();
                ans[idx] = nums[pos];               
            }
            st.push(pos);
        }
        return ans;
    }
}

接雨水 直接双指针找到前后缀最大值即可

class Solution {
    public int trap(int[] height) {
        int ans = 0;
        int left = 0, right = height.length - 1;
        int preMax = 0, sufMax = 0;
        // 相向双指针,找前缀最大值和后缀最大值
        while(left <= right){
            preMax = Math.max(preMax, height[left]);
            sufMax = Math.max(sufMax, height[right]);
            // 后缀最大值更大时,left就要右移,并且是可以接水的
            if(preMax < sufMax){
                ans += preMax - height[left];
                left++;
            }else{
                ans += sufMax - height[right];
                right--;
            }
        }
        return ans;
    }
}

你可能感兴趣的:(代码随想录二刷,leetcode,算法,java)