热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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

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

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

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


🙊本文目录👍

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


🙊写在前面🙊

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

题目

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


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


示例

示例1&#xff1a;

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

示例2:

输入&#xff1a;nums &#61; [9,4,3,2]
输出&#xff1a;-1
解释&#xff1a;
不存在同时满足 i

示例3&#xff1a;

输入&#xff1a;nums &#61; [1,5,2,10]
输出&#xff1a;9
解释&#xff1a;
最大差值出现在 i &#61; 0 且 j &#61; 3 时&#xff0c;nums[j] - nums[i] &#61; 10 - 1 &#61; 9 。

提示

n &#61;&#61; nums.length
2 <&#61; n <&#61; 1000
1 <&#61; nums[i] <&#61; 10^9

&#x1f4dd;思路&#x1f4dd;

本题考查知识点

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

⭐代码实现⭐

双重循环暴力AC

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

单层循环贪心求解

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

辅助栈求解

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

运行结果

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

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

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

&#x1f64a;写在最后&#x1f64a;

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

美好的日出 美好的山河

都因有你存在 而璀璨 耀眼

在这里插入图片描述


推荐阅读
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
author-avatar
哇哈哈啦啦啦啦_729
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有