简单
合并两个有序数组
题目描述
1 | 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 |
题目解答
1 | public class Solution { |
移除元素
题目描述
1 | 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 |
题目解答
1 | public class Solution { |
删除有序数组中的重复项
题目描述
1 | 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 |
题目解答
1 | public class Solution { |
删除有序数组中的重复项II
题目描述
1 | 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 |
题目解答
1 | public class Solution { |
多数元素
题目描述
1 | 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 |
题目解答
- 用计数统计并选择出最大值就是众数,时间复杂度O(n),空间复杂度O(m)
- 用map统计数量并选择出最大值就是众数,时间复杂度O(n),空间复杂度O(n)
- 排序后n/2处的数就是众数,时间复杂度O(nlogn),空间复杂度取决于排序算法的空间复杂度
- 随机选择一个数判断是不是众数(因为众数的占比高),最坏时间复杂度O(∞),空间复杂度O(1)
- 分治法选择出众数,时间复杂度O(nlogn),空间复杂度O(logn)
- 投票算法,时间复杂度O(n),空间复杂度O(1)
投票算法详解
- 先假定一个数为众数,再遍历数组进行投票
- 如果当前数和假定数相等,则投票数加1,否则投票数减1
- 投票前先判断一下当前票数,如果票数为0,则代表假定数不是众数,需淘汰出局,并假定当前数为众数后继续
1 | public class Solution { |
轮转数组
题目描述
1 | 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 |
题目解答
- 暴力法:循环K次,每次向右轮转1个位置
- 归并法:用新数组先归并后K个,再归并剩余的部分,最后将结果拷贝回原数组
- 置换法:将元素存到新数组中轮转后的位置,最后将结果拷贝回原数组
ps:移动nums.length次就会回到原位,所以K要先降到模数一下,即
K = K % nums.length`
1 | public class Solution { |
买卖股票的最佳时机
题目描述
1 | 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 |
题目解答
- 二层循环(j > i)求的最大差值就是最大利润
- 一次循环时判断最小值时购买后卖出的利润是不是最大利润
1 | public class Solution { |
买卖股票的最佳时机II
题目描述
1 | 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 |
题目解答
1 | public class Solution { |
跳跃游戏
题目描述
1 | 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 |
题目解答
1 | public class Solution { |
跳跃游戏II
题目描述
1 | 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 |
题目解答
1 | public class Solution { |
H指数
题目描述
1 | 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 |
题目解答
1 | import java.util.Arrays; |
O(1)时间插入、删除和获取随机元素
题目描述
1 | 实现RandomizedSet 类: |
题目解答
1 | import java.util.ArrayList; |
除自身以外数组的乘积
题目描述
1 | 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 |
题目解答
1 | public class Solution { |
加油站
题目描述
1 | 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 |
题目解答
设从x出发,不能行驶一圈时能够最远到达的加油站为y,并设z为x和y之间的加油站
则从z出发,也不能到达y的下一站(则说明从z出发也不能行驶一圈)
证明如下:
- 因为从x能到达y,z在x和y之间,所以从x能到z
- 因为从x能到达z,所以在到达z后汽油可能还有剩余
- 因为从x到达z后汽油可能还有剩余继续行进也不能到达y的下一站,所以从z直接出发肯定也不能到达y的下一站
1 | public class Solution { |
困难
分发糖果
题目描述
1 | n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 |
题目解答
TODO:分发糖果
1 | public class Solution { |
接雨水
题目描述
1 | 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 |
题目解答
TODO:接雨水
1 | public class Solution { |