| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【JAVA刷题初阶】刷爆力扣第六弹——数组 -> 正文阅读 |
|
[数据结构与算法]【JAVA刷题初阶】刷爆力扣第六弹——数组 |
文章目录🎪 前言:关于JAVA刷题
第一题:买卖股票的最佳时机👇👇👇 🚀 题目描述给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 🚀示例
示例2
🚀提示● 1 <= prices.length <= 105 🧰题解常规思路: 我们看到这道题第一反应是什么?嵌套遍历数组求相减的最小值?我们试了试发现结果为超出时间限制。。。因为它的长度最大可以为10的5次方,故嵌套遍历会超出时间限制,那么我们怎么减少时间呢,将它的时间复杂度控制在O(n),我们知道要求最大利润:必须当前数字减最小值得到的值跟已记录的利润比较,较大的为最大利润,那么我们用两个变量来记录利润最大值和最小值即可,最后返回利润最大值即可
第二题:多数元素👇👇👇 🚀 题目描述给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ? n/2 ? 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 🚀示例
示例2
🚀提示● n == nums.length 进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。 🧰题解这道题该怎么弄呢?需要找到出现大于等于n / 2次的数字,似乎遍历的话会很麻烦呢?没有思路,来来来,我给大家玩个故事: 玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。 那就大混战呗,最差所有人都联合起来对付你(对应你每次选择作为计数器的数都是众数count),或者其他国家也会相互攻击(会选择其他数作为计数器的数),但是只要你们不要内斗,最后肯定你赢。 最后能剩下的必定是自己人。 所以只要存在大于等于一半的数字,最后互相对拼消耗,最后剩下来的必然是最多的数字
第三题:删除有序数组中重复项👇👇👇 🚀 题目描述给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。 不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 判题标准: 系统会用下面的代码来测试你的题解:
如果所有断言都通过,那么您的题解将被 通过。 🚀示例
示例2
🚀提示● 1 <= nums.length <= 3 * 104 🧰题解常规思路 首先,我们最容易想到的就是嵌套遍历数组,由于其实有序的,故所有重复数字排列在一起,我们遇到重复数字则嵌套遍历,直到紧挨的元素不相等,然后再移动数组元素,既可以达到删除的效果。
优解 虽然通过了所有用例,但这时间复杂度感人,我们能不能只遍历一次数组达到删除的效果呢?我们看到返回的实际是数组长度,然后再根据这个长度去判断你的数组是否合理,那么我们借一步说话:是不是每次遇到重复元素时继续遍历数组,一旦不重复了,我们是不是可以直接把那个非重复元素,直接放在其重复初始位置,反正最后它只检查你返回的数组大小,如此往复最后返回索引即可
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:39:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |