leetcode每日一题 2016. 增量元素之间的最大差值 简单模拟 一题三解两做

本文主要是介绍leetcode每日一题 2016. 增量元素之间的最大差值 简单模拟 一题三解两做,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

📖本篇内容:leetcode每日一题 2016. 增量元素之间的最大差值 简单模拟 一题三解两做~

📑 文章专栏:leetcode每日一题《打卡日常》

📆 最近更新:2022年2月25日 leetcode每日一题 537. 复数乘法 简单的字符串模拟拼接问题

🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起

🙊本文目录👍

  • 🙊写在前面🙊
  • 题目
    • 示例
    • 提示
    • 📝思路📝
    • ⭐代码实现⭐
    • 运行结果
  • 🙊写在最后🙊

🙊写在前面🙊

今日早上在学校被冻醒了,说也是奇怪,昨天中午都被大太阳晒着都要出了汗,今天就冷的瑟瑟发抖,害,世事无常,大肠包小肠,不多说了,接着肝题啦~今天又是一道简单的模拟题,最近几天都是模拟,我怀疑过两天就是困难模拟题了!先不说了,今天这题一题三做。

题目

给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。

返回 最大差值 。如果不存在满足要求的 i 和 j ,返回 -1 。

示例

示例1:

输入:nums = [7,1,5,4]
输出:4
解释:
最大差值出现在 i = 1 且 j = 2 时,nums[j] - nums[i] = 5 - 1 = 4 。
注意,尽管 i = 1 且 j = 0 时 ,nums[j] - nums[i] = 7 - 1 = 6 > 4 ,但 i > j 不满足题面要求,所以 6 不是有效的答案。

示例2:

输入:nums = [9,4,3,2]
输出:-1
解释:
不存在同时满足 i < j 和 nums[i] < nums[j] 这两个条件的 i, j 组合。

示例3:

输入:nums = [1,5,2,10]
输出:9
解释:
最大差值出现在 i = 0 且 j = 3 时,nums[j] - nums[i] = 10 - 1 = 9 。

提示

n == nums.length
2 <= n <= 1000
1 <= nums[i] <= 10^9

📝思路📝

本题考查知识点

  • 思路1:简单的暴力模拟AC,直接一个双重for循环就可以搞定,但是这样的时间复杂度为 n^2,违背了咱们的算法思想初衷,所以咱们再来进行对应优化。
  • 思路2: 尝试着优化为单次循环的思路 , 优化为贪心的思路,由题咱们可以知道,i < j && nums[i] < nums[j],这样一来我们就可以假定判断当前所处位置时,最小的nums[i]的值即作为min,这样一来我们只需要计算当前所处位置的值 - 当前位置最小的nums[i] 的值就可以获取最大的差值了~
  • 思路3:小付之前刷过剑指offer中的一道题——155. 最小栈 思路也可以参考最小栈,多维护一个辅助栈来进行求解答案数据,思路3和思路2本质相同,但是实现的情况有不同,这里可以进行参考。

⭐代码实现⭐

双重循环暴力AC

class Solution {public int maximumDifference(int[] nums) {int n = nums.length;int max = -1;for (int i = 0 ; i< n ; i++){for (int j = i+1;j<n;j++){// 进行判定 需要进行修改最大差值的前提如题所给if (max < nums[j] - nums[i] && nums[i] < nums[j])max = Math.max(nums[j] - nums[i],max);}}return max;}
}

单层循环贪心求解

class Solution {public int maximumDifference(int[] nums) {int n = nums.length;// 初始化没有找到的情况下的结果int max = -1;// 进行遍历 ,并且设置初始位置的最小nums[i] 为第一个元素for (int i = 0 ,min = nums[0]; i< n ;i++){// 如果满足 当前元素的值 大于了 当前所处位置的最小nums[i] 则进行更新我们的最大差值if (nums[i] > min) max = Math.max(nums[i] - min,max);// 更新我们 当前位置的最小nums[i] min = Math.min(min,nums[i]);}return max;}
}

辅助栈求解

class Solution {public int maximumDifference(int[] nums) {// 初始化辅助栈Stack<Integer> helpStack = new Stack<>();helpStack.push(nums[0]);// 初始化数据栈Stack<Integer> stack = new Stack<>();int max = -1;// 初始化for (int num : nums){stack.push(num);helpStack.push(Math.min(num,helpStack.peek()));}while (!stack.isEmpty() ){// 获取判断差值max = Math.max(stack.pop() - helpStack.pop(),max);}// 这步是为了防止i < j 时将其赋值引起的最小差值if (max == 0)return -1;return max;}
}

运行结果

双重循环暴力AC
在这里插入图片描述

单层循环 贪心求解
在这里插入图片描述

辅助栈求解
在这里插入图片描述

🙊写在最后🙊

2022-2-26今天小付打卡了哦~

美好的日出 美好的山河

都因有你存在 而璀璨 耀眼

在这里插入图片描述

这篇关于leetcode每日一题 2016. 增量元素之间的最大差值 简单模拟 一题三解两做的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/792543

相关文章

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

Java文件与Base64之间的转化方式

《Java文件与Base64之间的转化方式》这篇文章介绍了如何使用Java将文件(如图片、视频)转换为Base64编码,以及如何将Base64编码转换回文件,通过提供具体的工具类实现,作者希望帮助读者... 目录Java文件与Base64之间的转化1、文件转Base64工具类2、Base64转文件工具类3、

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.