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

简介: 给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数,你必须找到对应元素的 第二大 整数。如果 nums[j] 满足以下条件,那么我们称它为 nums[i] 的 第二大 整数:j > inums[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

 题目

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

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

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

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

      • 比方说,数组 [1, 2, 4, 3] 中,1 的第二大整数是 42 的第二大整数是 334 的第二大整数是 -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;
            }
        }

        image.gif


        目录
        相关文章
        |
        2月前
        |
        存储 算法 Java
        Arraylist 在 Java 中能容纳多少个元素?
        【8月更文挑战第23天】
        65 0
        |
        2月前
        |
        存储 Java
        |
        25天前
        |
        Java 编译器 测试技术
        |
        2月前
        |
        存储 Java
        Java中ArrayList 元素的排序
        本文提供了Java中根据`ArrayList`元素的某个属性进行排序的示例代码,包括实现`Comparable`接口和重载`compareTo`方法,然后使用`Collections.sort`方法进行排序。
        |
        2月前
        |
        存储 安全 Java
        |
        2月前
        |
        Java
        |
        2月前
        |
        算法
        leetcode188 买卖股票的最佳时机IV
        leetcode188 买卖股票的最佳时机IV
        54 0
        |
        2月前
        |
        存储 Java API
        |
        6天前
        |
        Unix Shell Linux
        LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
        本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
        LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
        |
        2月前
        |
        Python
        【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
        本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
        45 6
        下一篇
        无影云桌面