lc41寻找缺失第一个的正数解法超详细解释

在这里插入图片描述
本体的目标是找到数组中若按顺序排列后缺少的最小的正数
在这里插入图片描述
本题的难点在于如何使用常数级的空间以及O(n)级别的时间复杂度实现。
首先需要明确的是,缺失的最小正整数一定出现在[1, nums.length+1]范围内,若数组中包含[1, nums.length]的数字,此时数组若排序则是[1, nums.length]连续的,则缺失的最小正整数为nums.length+1,其他情况(即数组排序后不连续)的最小缺失正整数均在[1, num.length]范围内。
由于时间和空间复杂度的限制,我们需要将数组本身进行一些处理,使其变成哈希存储的形式。
整个过程分成两步:
1.第一次遍历整个数组,将nums[i]放在nums[i]-1的索引处,即映射关系是num[i] = i + 1。处理的方式是,交换nums[i]和nums[nums[i]-1]两位置的数字。交换之后,nums[i]的数值仍可能需要交换到正确位置,因此用一个while循环,循环的条件如下:
1 <= nums[i] <= nums.length
nums[i] != nums[nums[i] - 1]
我们的目的是将处在[1, nums.length]范围内的正数放在对应的索引处,超出此范围的数字无需考虑,第二个条件用于避免在某些数字有重复或已经在正确位置上的数字仍然进入while循环交换位置。
举个简单例子:
在这里插入图片描述在这里插入图片描述
遍历完成之后,数组中处在[1, nums.length]范围内的数字全部放在正确的哈希索引位置,接着进行第二步的遍历即可。
2.第二次遍历即遍历已经处理完成的数组,数组中所有处于[1. num.length]范围内的数值,均在对应的位置上,因此从头开始遍历,找到第一个不满足映射关系的索引,加一之后即为缺失的最小的数值。
完整代码如下:

 public static int firstMissingPositive(int[] nums) {
        // 第一遍遍历将数组映射为哈希表的形式
        for (int i=0; i < nums.length;i++) {
            // 将[1, N]的数字x映射到数组中x-1的位置上
            while (nums[i] >= 1 && nums[i] <= nums.length && nums[nums[i] - 1] != nums[i]) {
                int tmp = nums[nums[i] - 1];
                nums[nums[i] - 1] = nums[i];
                nums[i] = tmp;
            }
        }
        for (int i = 0; i < nums.length; i++){
            if (nums[i] != i + 1){
                return i + 1;
            }
        }
        return nums.length+1;
    }
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LC并联谐振分压电路是一种基本的电路,它由一个电感和一个电容并联组成。当该电路中的电容和电感的共振频率与输入信号的频率相同时,该电路会产生谐振现象,从而使电路的阻抗变得非常大,电路中的电压也会发生很大的变化。在这种情况下,电路中的电压分布将会受到电容和电感的分压作用,因此该电路也被称为LC分压电路。该电路可以被用作选频电路,因为它可以通过调整电容或电感的值来选择特定的频率进行放大。 仿真LC并联谐振分压电路可以使用电路仿真软件,例如LTSpice或PSpice等。在仿真过程中,需要将电路的参数输入到仿真软件中,然后通过添加一个输入信号来激励电路。仿真软件将模拟电路的响应并输出电路中的电压和电流等参数。通过观察输出结果,我们可以分析电路的性能以及如何调整电路参数来优化电路的工作。 选频电路的仿真和LC并联谐振分压电路的仿真类似。选频电路通常由一个谐振电路和一个放大器组成。当输入信号的频率与谐振电路的共振频率相同时,谐振电路将会产生谐振现象,从而使电路的阻抗变得非常大,电路中的电压也会发生很大的变化。这个变化的电压信号经过放大器放大后,就可以得到一个特定频率的输出信号。 仿真选频电路可以使用与LC并联谐振分压电路相同的电路仿真软件。需要将电路的参数输入到仿真软件中,并通过添加一个输入信号来激励电路。仿真软件将模拟电路的响应并输出电路中的电压和电流等参数。通过观察输出结果,我们可以分析电路的性能以及如何调整电路参数来优化电路的工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值