2454. 下一个更大元素 IV --力扣 --JAVA

2023-12-13 07:10:37

题目

给你一个下标从?0?开始的非负整数数组?nums?。对于?nums?中每一个整数,你必须找到对应元素的?第二大?整数。

如果?nums[j]?满足以下条件,那么我们称它为?nums[i]?的?第二大?整数:

  • j > i
  • nums[j] > nums[i]
  • 恰好存在?一个?k?满足?i < k < j?且?nums[k] > nums[i]?。

如果不存在?nums[j]?,那么第二大整数为?-1?。

  • 比方说,数组?[1, 2, 4, 3]?中,1?的第二大整数是?4?,2?的第二大整数是?3?,3?和?4?的第二大整数是?-1?。

请你返回一个整数数组?answer?,其中?answer[i]?nums[i]?的第二大整数。

解题思路

  1. 最后两个一定为-1,因为右侧不足两个,不存在第二大整数;
  2. 倒序遍历,可以利用重复数据;
  3. 分情况讨乱,利用重复数据进行赋值。

代码展示

class Solution {
    public int[] secondGreaterElement(int[] nums) {
        int n = nums.length;
        int[] ans = new int[n];
        Arrays.fill(ans,-1);
        for (int i = n - 3; i >= 0; i--){
            int flag = 0;
            for (int j = i + 1; j < n; j++){
                if(nums[j] > nums[i]){
                    if(++flag == 2){
                        ans[i] = nums[j];
                        break;
                    }
                } else if (nums[j] == nums[i]){
                    if(flag == 0){
                        ans[i] = ans[j];
                        break;
                    }
                } else {
                    if(ans[j] == -1 && flag == 0){
                        break;
                    }
                }
            }
        }
        return ans;
    }
}

文章来源:https://blog.csdn.net/qq_45794129/article/details/134946438
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。