LintCode-丢失的第一个正整数

本文介绍了一种高效算法,用于从一个无序的正数数组中找到未出现的最小正整数。该算法利用了原地哈希的思想,确保时间复杂度为O(n),并仅使用常数级别额外空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出一个无序的正数数组,找出其中没有出现的最小正整数。

样例

如果给出 [1,2,0], return 3 如果给出 [3,4,-1,1], return 2

挑战

只允许时间复杂度O(n)的算法,并且只能使用常数级别的空间。

分析:把当前数放到该放的位置即可,如1应该放到第0个位置,2应该放到第1个位置。

代码:

class Solution {
public:
    /**    
     * @param A: a vector of integers
     * @return: an integer
     */
    int firstMissingPositive(vector<int> A) {
        // write your code here
        int n = A.size();
        for(int i=0;i<n;)
        {
            if(A[i]==i+1)
                i++;
            else
            {
                if(A[i]>=1&&A[i]<=n&& A[A[i]-1]!=A[i])
                    swap(A[i],A[A[i]-1]);
                else
                    i++;
            }
        }
        for(int i=0;i<n;i++)
            if(A[i]!=i+1)
                return i+1;
        return n+1;
    }
};


在Vue.js中使用Element UI的el-input-number组件时,可以通过设置相关属性来限制用户只能输入正整数。以下是几种实现方法: 1. 使用`min`和`step`属性: ```vue <el-input-number v-model="number" :min="1" :step="1"></el-input-number> ``` 通过设置`min`为1,可以确保输入值不会小于1,从而避免负数和零。`step`设置为1可以限制只能输入整数。 2. 使用`precision`属性: ```vue <el-input-number v-model="number" :precision="0" :step="1"></el-input-number> ``` 设置`precision`为0,可以确保输入值为整数。 3. 使用`on-change`事件进行验证: ```vue <el-input-number v-model="number" :min="1" :step="1" @change="handleChange"></el-input-number> <script> export default { data() { return { number: 1 } }, methods: { handleChange(value) { if (!Number.isInteger(value) || value <= 0) { this.$message.error('请输入正整数'); this.number = 1; } } } } </script> ``` 在`on-change`事件中,我们可以添加更复杂的验证逻辑,确保输入值为正整数。 4. 使用正则表达式限制输入: ```vue <el-input-number v-model="number" :min="1" :step="1" @input="handleInput"></el-input-number> <script> export default { data() { return { number: 1 } }, methods: { handleInput(value) { const reg = /^[1-9]\d*$/; if (!reg.test(value)) { this.$message.error('请输入正整数'); this.number = 1; } } } } </script> ``` 通过正则表达式,我们可以精确控制输入内容,确保只接受正整数。 这些方法可以根据具体需求组合使用,以达到最佳的输入限制效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值