原地哈希

使用场景

可以使用哈希表完成,但限制空间复杂度O(1),且数组元素和数组下标(0 ~ n-1或 1 ~ n)有关,可以使用原地哈希将数组当成哈希表:
1)数组中有0 或 没0时:
原地置换:
遍历数组时置换元素,使得 nums[i]=i(或nums[i]=i+1)。
比如:nums[0]=0(或1),nums[1]=1(或2),nums[2]=2(或3)……

2)数组中没0
遍历数组,遍历到元素 i 时,将对应的下标 i-1 上的元素nums[i-1]取反做标记;第二次遍历时,若nums[i]>0,则说明不存在元素 i+1 。

时间复杂度:O(n)。

Leetcode中这一类问题是数组范围(0,N)找寻重复数字或者消失的数字:

面试题03. 数组中重复的数字
Leetcode 41. 缺失的第一个正数
Leetcode 442. 数组中重复的数据
Leetcode 448. 找到所有数组中消失的数字

在这里插入图片描述

【思路】原地置换,使得nums[i]=i+1,当nums[i]超出范围或者重复时,放弃交换,遍历下一个元素。

class Solution {
   
public:
    int firstMissingPositive(vector<int>& nums) {
   
        int n=nums.size();
        for
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值