LeetCode做题总结

645. 错误的集合

集合 s 包含从 1 到 n 的整数。找到重复数字和丢失数字

方法一:先排序,用一个数记录前一个元素,初始为0,一个数记录当前元素。如果两数相等则为重复,如果两数相差大于1,则可锁定丢失值。

方法二:定义一个大小相同的新数组,遍历原数组,根据当前值找到新数组数组下标为当前值的位置。如果为0,改为1,如果为1,说明为重复数字。最后遍历新数组,找到为0的数组下标,则为丢失数字。

方法二改进:直接在原数组上操作,根据当前值的绝对值定位数组下标,将其改为负数,如果改之前已经是负数,则该下标为重复数。最后遍历数组,为正数的下标为丢失数字。

697. 数组的度

方法:使用哈希表的方式。Map<Integer, int[]>,键为元素,数组的第一个元素为出现次数,第二个元素为起始地址,第三个元素为终止地址。然后遍历哈希表,不断更新最大出现次数和最短连续子数组。

448. 找到所有数组中消失的数字

方法一:鸽笼原理,如果出现过,相应的“鸽笼”就会被占掉。将当前值对应的数组下标值加上数组长度或者改为负数。最后通过遍历原数组,将值小于等于数组长度或者为负数的下标输出。

方法二:交换。遍历数组,将当前位置的值与数组下标为该值的值进行互换,直到当前位置索引值加一与值相等。最后所有值都应该回到自己的位置,遍历数组,输出值与下标不匹配的下标值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值