刷的是leetcode上面的题
https://leetcode.cn/studyplan/top-interview-150/
数组/字符串
合并两个有序数组
错误的尝试
1 | class Solution { |
循环过于复杂,多余的数组,未能得到正确的结果。
正确的
1 | class Solution { |
移除元素
1 | class Solution { |
删除有序数组中的重复项
错误的尝试
1 | class Solution { |
错误使用了双循环,导致index的值多次错误增加,下面是双循环的正确写法
1 | class Solution { |
或者本题有更简单的解法
1 | class Solution { |
删除有序数组中的重复项 II
错误的尝试
1 | class Solution { |
第一个能过第二个过不了。。。。
因为flag的更新不及时,如果刚好是两个元素则会跳过下一组,需要单独将计数器逻辑放到一起,后面根据计数器的值来进行值的存放。
1 | class Solution { |
多数元素
一遍过
测试
1 | class Solution { |
提交过了又修改了一下。
1 | class Solution { |
时间太慢了
gpt写一个优化后的
1 | class Solution { |
投票算法,第一次听说。投票算法能够确保返回的候选元素是多数元素,前提是数组中确实有一个出现次数超过一半的元素。算法本质上通过频繁更新候选元素的方式,最终能够选出正确的多数元素。极速。
轮转数组
错误的尝试
1 | class Solution { |
如果数组的长度小于位移的长度就会因为数组索引变成负数的情况出问题,这时候需要将k置为小于数组长度,k%length得到余数就可以解决这个问题,因为超过的元素会轮回回来。
1 | class Solution { |
买卖股票的最佳时机
寻找最低的值,在最低的值后寻找最高的值。
错误的尝试
1 | class Solution { |
正确解法:设置两个变量,最小值以及最大利润,遍历整个数组,根据条件更新值。因为是先买入再卖出。
1 | class Solution { |
Integer.MAX_VALUE
是 Java 中整数类型的最大值(231−1=21474836472^{31} - 1 = 2147483647231−1=2147483647)。
在遍历 prices
数组时,任何实际价格都比 Integer.MAX_VALUE
小,因此第一次遇到的价格会更新 minPrice
。
买卖股票的最佳时机 II
上帝视角,在跌之前卖出,哈哈哈哈,没有上帝视角永远没有最佳时机,所以看淡得失。
1 | class Solution { |
正确解法
1 | class Solution { |
我是我的代码总是复杂且错误?
跳跃游戏
贪心算法
1 | class Solution { |
跳跃游戏 II
1 | class Solution { |
选择等待而不是强制跳到,细水长流。
H 指数
龟速方式
1 | class Solution { |
但是还是通过了
nb方法,对原始数组动手,又是新思路。
1 | import java.util.Arrays; |
O(1) 时间插入、删除和获取随机元素
1 | class RandomizedSet { |
238. 除自身以外数组的乘积
题目要求时间复杂度为O(n)所以就不能使用嵌套循环了。
解决办法是先计算出从左到右自己左边所有数的乘积,再从右到左计算自己右边所有数的乘积。
1 | class Solution { |