
LeetCode
以leetCode为基础,逐步练习,增强算法思想,提升思维敏捷度
xiao-tao
学无止境,快乐搬砖!
展开
-
LeetCode:数组的改变、移动(283 移动零)
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]要求:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。思路:将所有0移动到数组的末尾,同时保持非零元素的相对顺序首先定义两个指针让指针i去寻找非0的值,指针j从索引0开始去与i比对出来的值做互换这样非0的值就按顺序排到了前面class Solution { public void moveZ.原创 2020-10-21 19:25:18 · 129 阅读 · 0 评论 -
LeetCode:数组的改变、移动(665 非递减数列)
给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例1:输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例2:输入: nums = [4,2,1]输出: false解释: 你不能在只改变一个元素的情.原创 2020-10-21 19:16:44 · 255 阅读 · 0 评论 -
LeetCode:数组的改变、移动(453 最小移动次数使数组相等)
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动将会使 n - 1 个元素增加 1。示例:输入:[1,2,3]输出:3解释:只需要3次移动(注意每次移动会增加两个元素的值):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]思路:每次移动使得(n-1)个元素增加1等价于使得1个元素-1所以只需要用所有的数和最小的数进行比较然后统计次数即可class Solution { .原创 2020-10-20 21:52:59 · 182 阅读 · 0 评论 -
LeetCode:统计数组中的元素(274 H指数)
给定一位研究者论文被引用次数的数组(被引用次数是非负整数)。编写一个方法,计算出研究者的 h 指数。h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数 不超过 h 次。)例如:某人的 h 指数是 20,这表示他已发表的论文中,每篇被引用了至少 20 次的论文总共有 20 篇。示例:输入:citations = [3,0,6,1,5].原创 2020-10-19 20:40:45 · 149 阅读 · 0 评论 -
LeetCode:统计数组中的元素(41 缺失的第一个正数)
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。示例1:输入: [1,2,0]输出: 3示例2:输入: [3,4,-1,1]输出: 2示例3:输入: [7,8,9,11,12]输出: 1思路:class Solution { public int firstMissingPositive(int[] nums) { int len = nums.length; for (int i = 1; i &l.原创 2020-10-19 20:18:05 · 162 阅读 · 0 评论 -
LeetCode:统计数组中的元素(442 数组中重复的数据)
给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]思路:根据题目特点可以将题目中的元素与索引建立一一对应的关系重复的元素,将会对应同一个索引具体做法:将元素所对应的的索引做一个标记(转为负值)假如第二次对应到同一个索引的话,则输出该元素class Solu.原创 2020-10-18 21:18:31 · 351 阅读 · 1 评论 -
LeetCode:统计数组中的元素(448 找到数组中消失的数字)
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]思路:根据题目特点,可以将数组中的元素与索引建立一一对应的关系,因为索引是确定的0-n-1,而元素缺了哪个谁也不知道。既然建立.原创 2020-10-18 20:37:04 · 151 阅读 · 0 评论 -
LeetCode:统计数组中的元素(697 数组的度)
给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。示例:输入: [1, 2, 2, 3, 1]输出: 2解释:输入数组的度是2,因为元素1和2的出现频数最大,均为2.连续子数组里面拥有相同度的有如下所示:[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]最短连续子数组.原创 2020-10-17 14:59:20 · 185 阅读 · 0 评论 -
LeetCode:统计数组中的元素(645 错误的集合)
集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。注意:给定数组的长度范围是 [2, 10000]。给定的数组是无序的。思路:因为数组是无序,所以要先给他由小到大排序先遍历数组,找到重复的数第三步是找到丢失的数,那么如何找到丢失的数? 我是通原创 2020-10-16 22:10:05 · 136 阅读 · 0 评论 -
LeetCode:数组的遍历(628 三个数的最大乘积)
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。注意:给定的整型数组长度范围是[3,10 000],数组中所有的元素范围是[-1000, 1000]。输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。思路:求三个数乘积的最大值,有两种可能两个最小的负数相乘同时乘以最大正数三个最大的正数相乘取这两种情况的最大值即可所以我们需要找到这5个值通过遍历数组,通过逻辑条件得到相应的值class Solution { public int maxim原创 2020-10-16 21:51:43 · 174 阅读 · 0 评论 -
LeetCode:数组的遍历(414 第三大的数)
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。示例:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2输入: [2, 2, 3, 1]输出: 1解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。 存在两个值为2的数,它们都排第二。思路:因为数组是非空的,所以暂时分为3种情况数组中只有1个元素,那就直接返原创 2020-10-16 21:36:29 · 196 阅读 · 0 评论 -
LeetCode:数组的遍历(495 提莫攻击)
在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。注意:可以嘉定时间序列数组的总长度不超过10 000嘉定提莫攻击时间序列中的数字和提莫攻击的中毒持续时间都是非负整数思路:给出了时间序列:int [ ] timeSeries中毒持续时间:int duration首先我们要判断时间序列数组是否原创 2020-10-16 19:17:38 · 165 阅读 · 0 评论 -
LeetCode:数组的遍历(485 最大连续1的个数)
从今天起,我就正式开始刷LeetCode。本博客只是用以记录自己的学习进度,记录自己的解题思路以及一些心得体会等等给定一个二进制数组,计算其中最大连续1的个数。注意:输入的数组只包含0 和 1输入的数组长度是正整数,且不超过10 000.思路:要计算其中最大连续1的个数,我们首先要遍历一遍数组找出一段连续1的个数,然后和下一段连续1的个数相比较。依次比较,直到找到其中最大的连续1的个数class Solution { public int findMaxConsecuti..原创 2020-10-16 18:55:48 · 155 阅读 · 0 评论