LeetCode算法题-Next Greater Element I(Java实现)

制造业信息化的现实困局与未来展望:从基础到数字化的挑战与机遇 随着全球科技的发展和市场竞争的加剧,制造业的转型升级成为企业必须面临的挑战。在信息化和数字化的浪潮下,许多企业试图通过技术创新来提升自身竞争力。然而,现实情况是,绝大部分制造业企业的基本信息化都尚未完成,更遑论复杂的数字化。那么,制造业在信息化进程中面对哪些阻碍?未来又该如何实现从基础信息化到数字化的转型? 阅读详情

这是悦乐书的第244次更新,第257篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第111题(顺位题号是496)。你有两个数组(没有重复)nums1和nums2,其中nums1的元素是nums2的子集。在nums2的相应位置找到nums1元素的所有下一个更大的数字。nums1中的数字x的下一个更大数字是nums2中右边第一个更大的数字。如果它不存在,则输出该数字的-1。例如:

输入:nums1 = [4,1,2],nums2 = [1,3,4,2]。

输出:[-1,3,-1]

说明:对于第一个数组中的数字4,在第二个数组中找不到下一个更大的数字,因此输出-1。对于第一个数组中的数字1,第二个数组中的下一个更大数字是3。对于第一个数组中的数字2,第二个数组中没有下一个更大的数字,因此输出-1。

输入:nums1 = [2,4],nums2 = [1,2,3,4]。

输出:[3,-1]

说明:对于第一个数组中的数字2,第二个数组中的下一个更大数字是3。对于第一个数组中的数字4,第二个数组中没有下一个更大的数字,因此输出-1。


注意:
  • nums1和nums2中的所有元素都是唯一的。

  • nums1和nums2的长度不会超过1000。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

暴力解法。使用两层循环,先找到nums1的元素在nums2中的对应元素,然后从nums2中找到的元素的下一位往右开始判断,找到比当前元素大的元素,找得到就将其作为结果数组的元素添加进去,否则就将-1添加进结果数组。

public int[] nextGreaterElement(int[] nums1, int[] nums2) {
    int[] result = new int[nums1.length];
    for (int i=0; i<nums1.length; i++) {
        int j = 0, k = 0;
        for (; j<nums2.length; j++) {
            if (nums1[i] == nums2[j]) {
                break;
            }
        }
        for (k = j+1; k<nums2.length; k++) {
            if (nums2[k] > nums2[j]) {
                result[i] = nums2[k];
                break;
            }
        }
        if (k == nums2.length) {
            result[i] = -1;
        }
    }
    return result;
}

03 第二种解法

我们可以将第一种方法进行优化,将nums2中的元素作为key、索引作为value存入HashMap,在原来第一种解法中每次通过循环来定位nums2中的索引位置,换成了通过key查找value的映射,获取到索引后,从索引后一位开始依次寻找比nums1的当前元素大的数字,找得到就替换已经设值为-1的结果数组的元素值。

public int[] nextGreaterElement2(int[] nums1, int[] nums2) {
    int[] result = new int[nums1.length];
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    for (int i=0; i<nums2.length; i++) {
        map.put(nums2[i], i);
    }
    for (int j=0; j<nums1.length; j++) {
        result[j] = -1;
        int index = map.get(nums1[j]);
        for (int k = index + 1; k<nums2.length; k++) {
            if (nums2[k] > nums1[j]) {
                result[j] = nums2[k];
                break;
            }
        }
    }
    return result;
}

04 第三种解法

使用HashMap和栈。在第二种解法中我们使用HashMap存的是nums2的值、索引,在此解法中,我们使用HashMap存的是,如果nums2的当前元素存在右边最大数,上一个元素为key,当前元素为value。

在遍历nums2中的元素时,如果栈不为空,并且当前栈顶的值小于当前元素,即nums2的前一个元素存在右边最大数,此时,我们需要将栈顶的元素作为key,当前元素作为value,存入HashMap中,同时,要将栈顶的元素移除,此操作是循环执行的。最后我们再将nums2的当前元素存入stack中。

接着,我们要开始处理nums1的数据了,遍历其中的元素,如果能够在HashMap中找到对应的值,就取其value作为结果数组的元素值,否则取-1作为默认值。

public int[] nextGreaterElement3(int[] nums1, int[] nums2) {
    int[] result = new int[nums1.length];
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    Stack<Integer> stack = new Stack<Integer>();
    for (int num : nums2) {
        while (!stack.isEmpty() && stack.peek() < num) {
            map.put(stack.pop(), num);
        }
        stack.push(num);
    }
    for (int i=0; i<nums1.length; i++) {
        result[i] = map.getOrDefault(nums1[i], -1);
    }
    return result;
}

05 小结

算法专题目前已日更超过三个月,算法题文章111+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据 1. 概述 MAX31855为热电偶至数字输出转换器,内置14位模/数转换器(ADC)。器件带有冷端补偿检测和修正、数字控制器、SPI兼容接口,以及相关的控制逻辑,在温度控制器、过程控制或监测系统中设计用于配合外部微控制器(μC)工作。提供多个版本的器件,每个版本针对特定的热电偶类型(K、J、N、T或E型)进行优化和调整。热电偶类型以器件型号后缀表示(例如MAX31855K)。 器件输出14位... 阅读详情

相关推荐

Stata极简生存分析

1. 导入数据 webuse drugtr,clear *webuse -- Use dataset from Stata website stset,clear *上一行命令导入进来的数据是“生存时间数据”,会比最原始的数据多四列,这一行命令的目的是重置为原始数据,之所以这样做,是为了显示数据处理的全部过程 codebook drug codebook studytime codebook died codebook age *codebook -- Describe data contents 2.

TOP生物信息 2336

LeetCode 496, 739,503,31 python 刷题

496. 下一个更大元素 I 给定两个没有重复元素的数组nums1和nums2,其中nums1是nums2的子集。找到nums1中每个元素在nums2中的下一个比其大的值。 nums1中数字x的下一个更大元素是指x在nums2中对应位置的右边的第一个比x大的元素。如果不存在,对应位置输出-1。 示例 1: 输入: nums1 = [4,1,2...

lhaniey的博客 394

Megatron单机多卡Qwen2.5:pre-train+sft

英伟达:https://github.com/NVIDIA/Megatron-LM/releases/tag/core_r0.8.0阿里:https://github.com/alibaba/Pai-Megatron-Patch/releases/tag/v0.10.2。

weixin_46873015的博客 2178

lintcode 1206. 下一个更大的数 I

你有两个数组 nums1和nums2(互不重复),其中nums1是nums2的子集。 在nums2的相应位置找到nums1所有元素的下一个更大数字。 nums1中的数字x的下一个更大数字是nums2中x右边第一个更大的数字。 如果它不存在,则为此数字输出-1。 例子 1: 输入: nums1 = [4,1,2], nums2 = [1,3,4,2]. 输出: [-1,3,-1] 解释: ...

sinb妃的博客 280

【个人记录】CentOS7升级glibc至2.28

由于CentOS7系统已经停止支持, 虽然大部分业务已经迁移至OpenEuler,但仍然有部分业务系统跑在CentOS7上。在尝试部署新业务环境时经常会提示如下错误(以code-server运行需要的node 20为例)node -v为了保障业务可正常运行,通常采用Docker继承好的node环境进行部署,但部分场景还是需要宿主机使用新版glibc版本。本文记录本人一次成功升级glibc(2.17=>2.28)的步骤。

喵呜 3883

EEG/ERP新手必看:5本神经科学入门书籍推荐(附高清PDF下载)

本文为EEG/ERP研究新手推荐5本神经科学入门书籍,涵盖认知神经科学、数据分析、ERP技术等核心内容。特别推荐《认知神经科学—关于心智的生物学》和《事件相关电位基础》,这些书籍不仅提供理论框架,还包含实用案例和MATLAB代码,帮助研究者快速掌握脑电研究技术。附高清PDF下载,适合实验室小组学习。

weixin_29210727的博客 444

leetcode496&leetcode503下一个更大元素I,II

给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。 nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。 示例 1: 输入: nums1 = [4,1,2], nums2 = [1,3,4,2]...

qq_41108034的博客 178

通过分子模板构建随机分布在溶液中的纳米颗粒(一)

通过分子模板构建随机分布在溶液中的纳米颗粒 要实现的目标: 1、可以循环建立多个水分子溶液的模型; 2、针对不同水分子数,自动创建文件夹; 3、运行完毕将所有结果自动存储在对应文件夹里; 分子模板的具体教程请见我的博客: https://blog.youkuaiyun.com/qq_43689832/article/details/104443175 1、首先,我们先建立纳米颗粒的分子模板,命名为p_30.txt: 包括两种原子类型。具体格式如下: # LAMMPS molecule file makin.

Rockyoung 2650

LeetCode 496. Next Greater Element I

496. Next Greater Element IYou are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1's elements in the corre...

柳婼 の blog 3002

YOLO11涨点优化:知识蒸馏 | 引入FGD(Focal and Global Distillation)蒸馏,让轻量学生模型汲取大模型全局感知力

文章摘要 目标检测模型YOLO11在轻量化部署中存在"全局盲区"问题,即轻量模型感受野不足导致大尺度场景下性能下降。知识蒸馏技术FGD(Focal and Global Distillation)通过双分支机制有效解决这一问题:Focal Distillation分离前景背景特征,让学生模型聚焦关键区域;Global Distillation传递像素间关系信息,弥补全局感知缺陷。实验表明,FGD可使YOLO11轻量版mAP提升2.5%以上,且不增加推理耗时。本文详细解析了FGD原理,并给出YOLO11上的实

2601_95807009的博客 226

ctle电路求帮忙分析低中高频调节原理,搭好了电路该怎样调节参数?

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 1126

LeetCode: 496. Next Greater Element I

LeetCode: 496. Next Greater Element I You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1’s ele

qha0731的专栏 442

YOLOv10有效涨点专栏目录 | 包含卷积、主干、检测头、注意力机制、Neck、二次创新、独家创新等上百种创新机制

Hello,各位读者们好本专栏自开设以来已经更新改进教程100余篇其中包含二次创新、独家创新多种改进方法,包含C2f、主干、检测头、注意力机制、Neck多种结构,也有损失函数和一些细节点上的创新。同时本人一些讲解视频和包含我所有创新的YOLOv10文档并不能在优快云上传,通过建立交流群的形式在内上传我完整的文件和视频我也会在群内不定期和大家交流回答大家问题。专栏介绍。

Snu77的博客 1万+

leetcode503 Next Greater Element II java

DescriptionGiven a circular array (the next element of the last element is the first element of the array), print the Next Greater Number for every element. The Next Greater Number of a number x is the

店小不二的博客 482

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LeetCode--Next Greater Element

LeetCode–Next Greater Element原题如下: You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1’s elements in

zhaopy_dlut的博客 263

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LeetCode-496. Next Greater Element I [C++][Java]

Thenext greater elementof some elementxin an array is thefirst greaterelement that isto the rightofxin the same array.

贫道绝缘子的博客 653

LeetCode-503. Next Greater Element II [C++][Java]

Given a circular integer arraynums(i.e., the next element ofnums[nums.length - 1]isnums[0]), returnthenext greater numberfor every element innums.

贫道绝缘子的博客 861

LeetCode 503. Next Greater Element II

问题描述: Given a circular array (the next element of the last element is the first element of the array), print the Next Greater Number for every element. The Next Greater Number of a number x is the fi

rentiansky的专栏 305

【LeetCode Easy】496. Next Greater Element I

原题链接 我的思路: 按stack的tag找到的这题,结果第一个AC的思路完全没有用到stack(orz 一个直观且简单且时间复杂度高的思路,三个for循环嵌套,很好理解,不多做解释了,最坏情况下的时间复杂度是O(n * m²) (其中n和m分别为nums1的长度和nums2的长度 class Solution { public int[] nextGreaterElement(int[]...

JellyFishDing的博客 216

leetcode 496. Next Greater Element I(栈)

题目描述: You are given two arrays(without duplicates)nums1andnums2wherenums1’s elements are subset ofnums2. Find all the next greater numbers fornums1's elements in the corresponding places ofn...

orangefly0214的博客 234

【LeetCode】496 Next Greater Element I

原题地址:496. Next Greater Element I。 解法一:普通解法 //O(n * m) vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) { vector<int>::iterator pos; vector<int> res; int flag; for (int i = 0; i < findNum

zhcourse的博客 141

JAVA:实现Next Grater Element下一个更大的元素算法(附带源码)

JAVA:实现Next Grater Element下一个更大的元素算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1143

LeetCode 496. 下一个更大元素 I(Next Greater Element I) 35

496. 下一个更大元素 I 496. Next Greater Element I 题目描述 给定两个没有重复元素的数组nums1 和nums2,其中 nums1是nums2的子集。找到nums1中每个元素在nums2中的下一个比其大的值。 nums1中数字x的下一个更大元素是指x在nums2中对应位置的右边的第一个比x大的元素。如果不存在,对应位置输出 -1...

weixin_30381317的博客 191

【Lintcode】1206. Next Greater Element I

题目地址: https://www.lintcode.com/problem/next-greater-element-i/description 给定两个数组AAA和BBB,BBB的数字没有重复,AAA是BBB的子集。要求返回一个数组CCC,使得C[i]C[i]C[i]是A[i]A[i]A[i]在BBB中的右边第一个比A[i]A[i]A[i]大的数。 思路是单调栈 + 哈希表。先利用单调栈求出BBB中每个数的右边第一个比它大的数是多少,用哈希表记录一下,然后再遍历AAA,从哈希表中得到AAA中每个数右边第

数学、算法爱好者的博客 169

VisualCppRedist AIO 完整指南:2005 至 2022 年全部 Visual C++ 运行库一键修复

周一早上,双击打开同事发来的软件,弹出一个熟悉的对话框:"无法启动此程序,因为计算机中丢失 MSVCP140.dll。"这类 DLL 缺失报错,几乎是 Windows 用户的集体记忆。VisualCppRedist AIO 就是为它而生的免费开源工具:一个安装文件,装齐微软 2005–2022 年的全部 Visual C++ 运行库,外加 Visual Studio 2010 Tools for

gitblog_00657的博客 337
上一篇: LeetCode算法题-Construct the Rectangle(Java实现)
下一篇: LeetCode算法题-Keyboard Row(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值