C#LeetCode刷题之#496-下一个更大元素 I(Next Greater Element I)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4026 访问。
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。
nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。
输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
输出: [-1,3,-1]
解释:
对于num1中的数字4,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。
对于num1中的数字1,第二个数组中数字1右边的下一个较大数字是 3。
对于num1中的数字2,第二个数组中没有下一个更大的数字,因此输出 -1。
输入: nums1 = [2,4], nums2 = [1,2,3,4].
输出: [3,-1]
解释:
对于num1中的数字2,第二个数组中的下一个较大数字是3。
对于num1中的数字4,第二个数组中没有下一个更大的数字,因此输出 -1。
注意:
- nums1和nums2中所有元素是唯一的。
 - nums1和nums2 的数组大小都不超过1000。
 
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 the corresponding places of nums2.
The Next Greater Number of a number x in nums1 is the first greater number to its right in nums2. If it does not exist, output -1 for this number.
Input: nums1 = [4,1,2], nums2 = [1,3,4,2].
Output: [-1,3,-1]
Explanation:
For number 4 in the first array, you cannot find the next greater number for it in the second array, so output -1.
For number 1 in the first array, the next greater number for it in the second array is 3.
For number 2 in the first array, there is no next greater number for it in the second array, so output -1.
Input: nums1 = [2,4], nums2 = [1,2,3,4].
Output: [3,-1]
Explanation:
For number 2 in the first array, the next greater number for it in the second array is 3.
For number 4 in the first array, there is no next greater number for it in the second array, so output -1.
Note:
- All elements in nums1 and nums2 are unique.
 - The length of both nums1 and nums2 would not exceed 1000.
 
示意
示例
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4026 访问。
public class Program {
    public static void Main(string[] args) {
        var findNums = new int[] { 4, 1, 2 };
        var nums = new int[] { 1, 3, 4, 2 };
        var res = NextGreaterElement(findNums, nums);
        ShowArray(res);
        findNums = new int[] { 2, 4 };
        nums = new int[] { 1, 2, 3, 4 };
        res = NextGreaterElement2(findNums, nums);
        ShowArray(res);
        Console.ReadKey();
    }
    private static void ShowArray(int[] array) {
        foreach(var num in array) {
            Console.Write($"{num} ");
        }
        Console.WriteLine();
    }
    public static int[] NextGreaterElement(int[] findNums, int[] nums) {
        var res = new List<int>();
        var j = 0;
        var flag = false;
        var list = nums.ToList();
        for(var i = 0; i < findNums.Length; i++) {
            j = list.IndexOf(findNums[i]) + 1;
            if(j == nums.Length) {
                res.Add(-1);
                continue;
            }
            flag = false;
            while(j < nums.Length) {
                if(nums[j] > findNums[i]) {
                    res.Add(nums[j]);
                    flag = true;
                    break;
                }
                j++;
            }
            if(!flag) res.Add(-1);
        }
        return res.ToArray();
    }
    public static int[] NextGreaterElement2(int[] findNums, int[] nums) {
        //栈,请参考上方示意图
        var dic = new Dictionary<int, int>();
        var stack = new Stack<int>();
        for(var i = 0; i < nums.Length; i++) {
            dic[nums[i]] = -1;
            while(stack.Any() && nums[i] > stack.Peek()) {
                dic[stack.Pop()] = nums[i];
            }
            stack.Push(nums[i]);
        }
        var res = new List<int>();
        foreach(var num in findNums) {
            res.Add(dic[num]);
        }
        return res.ToArray();
    }
}
以上给出2种算法实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4026 访问。
-1 3 -1
3 -1
分析:
显而易见,NextGreaterElement 的时间复杂度为:  ,NextGreaterElement2 的时间复杂度为: 
 。
C#LeetCode刷题之#496-下一个更大元素 I(Next Greater Element I)的更多相关文章
- LeetCode 496. 下一个更大元素 I(Next Greater Element I) 35
		
496. 下一个更大元素 I 496. Next Greater Element I 题目描述 给定两个没有重复元素的数组 nums1 和 nums2,其中 nums1 是 nums2 的子集.找到 ...
 - LeetCode 556. 下一个更大元素 III(Next Greater Element III)
		
556. 下一个更大元素 III 556. Next Greater Element III 题目描述 给定一个 32 位正整数 n,你需要找到最小的 32 位整数,其与 n 中存在的位数完全相同,并 ...
 - LeetCode 503. 下一个更大元素 II(Next Greater Element II)
		
503. 下一个更大元素 II 503. Next Greater Element II 题目描述 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 ...
 - [Swift]LeetCode496. 下一个更大元素 I | Next Greater Element I
		
You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...
 - [Swift]LeetCode503. 下一个更大元素 II | Next Greater Element II
		
Given a circular array (the next element of the last element is the first element of the array), pri ...
 - [Swift]LeetCode556. 下一个更大元素 III | Next Greater Element III
		
Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly th ...
 - Java实现 LeetCode 496 下一个更大元素 I
		
496. 下一个更大元素 I 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nu ...
 - 【LeetCode】496.下一个更大元素I
		
496.下一个更大元素I 知识点:栈:HashMap: 题目描述 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集. 请你找出 nums1 中每个元 ...
 - 496. 下一个更大元素 I
		
496. 下一个更大元素 I 给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. ...
 - Leetcode---栈系列刷题(python3实现)----#496 下一个更大元素I
		
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...
 
随机推荐
- 小白从零开始阿里云部署react项目+node服务接口(三:部署到服务器)
			
服务器 准备工具 依次安装即可 nginx 安装nginx https://www.runoob.com/linux/nginx-install-setup.html 配置全局nginx命令 http ...
 - Ethical Hacking - GAINING ACCESS(2)
			
Server Side Attacks - INFORMATION GATHERING Need an IP address. Very simple if target is on the same ...
 - 设计模式:decorator模式
			
两点: 继承同一虚接口,实现数据一致性 桥接方式指向被装饰类 目的:在不改变被装饰类功能的前提下增加新功能 特点:继承是子类和父类强耦合,桥接是低耦合 例子: class Print //抽象接口 { ...
 - 【Nginx】图片显示过慢,文件下载不完全,竟然是Nginx的锅!!
			
写在前面 最近,一名读者跟我说他通过浏览器访问自己的服务器时,图片显示的非常慢,以至于在浏览器中都无法完全加载出来,下载文件时,更是恼火,文件根本就无法完全下载下来.而且奇怪的是这位读者所在的网络是没 ...
 - abp vnext 开发快速入门 2 实现基本增删改查
			
上篇说了abp vnext 的大体框架结构,本篇说下如何实现基础的增删改查.实现增删改查有以下几个步骤: 1.配置数据库连接 2.领域层(Domain)创建实体,Ef core 层配置Dbset( 用 ...
 - 前端学习(二):head标签
			
进击のpython ***** 前端学习--head标签 head标签中的相关标签,是看不见摸不着的,仅仅是对应用于网页的一些基础信息(元信息) 前面说的是青春版,完整的head应该是这样的 !< ...
 - animation动画汇总(一阶段项目)
			
animation 属性 动画属性: 1.animation-name:规定需要绑定到选择器的 keyframe 名称. 2.animation-duration:规定完成动画所花费的时间,以秒或毫秒 ...
 - 使用 you-get 下载免费电影或电视剧
			
安装 you-get 和 ffmpeg ffmpeg 主要是下载之后,合并音频和视频 pip install you-get -i http://pypi.douban.com/simple/ --t ...
 - Upload 上传 el-upload 上传配置请求头为Content-Type: "multipart/form-data"
			
api接口处添加属性 (标红处) // 校验台账 export const checkEquiment = (data) => { return axios({ url: '/job/equip ...
 - PDOStatement::bindValue
			
PDOStatement::bindValue — 把一个值绑定到一个参数(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 bool PDOStateme ...