当前位置: 首页 > 知识库问答 >
问题:

数组中不存在的最小整数

田德运
2023-03-14

编写一个函数:

函数解($ A);

给定一个包含 N 个整数的数组 A,返回 A 中未出现的最小正整数(大于 0)。

例如,给定A = [1,3,6,4,1,2],函数应该返回5。

再比如,给定A = [1,2,3],函数应该返回4。

给定A =[1,3],该函数应返回1。

假设:

N是[1…100,000]范围内的整数;数组A的每个元素都是[−1,000,000…1,000,000]范围内的整数。复杂性:

预期最坏情况时间复杂度为O(N);预期最坏情况空间复杂度为O(N),超出输入存储(不包括输入参数所需的存储)。可以修改输入数组的元素

我的尝试:

function solution($A) {
    $b=min($A);
    $c=max($A);
     for($i=$b; $i<=$c;$i++){
         if($b>0){
                if($b!=1){
                    return 1;
                    }else{
                        for($x=1;$x<=$c;$x++){
                            $b=1;
                            $b=$b+$x;
                            if(!in_array($b,$A)){
                                return $b;
                                }
                        }
                    }
         }else if($b<0 && $c<0){
             return 1;
             }else if($b<0 && $c>0){
                 //was working on this case..
                 }
        //echo $test.'<br>';
    }
}

根据结果,此尝试的正确率为40%。

共有3个答案

边霄
2023-03-14

提示没有说数组是有序的,所以不能只是递增。您也不希望重复进行线性搜索,因为数组可能很大。存储在类似散列集的东西中(用于快速查找),并跳过负数:

PHP实现:

<?php
  function solution(array $arr) {
    $set = [];

    foreach ($arr as $value) {
      if ($value > 0) {
        $set[$value] = $value;
      }
    }

    for ($i = 1; isset($set[$i]); $i++);

    return $i;
  }


  echo solution(array(1, 3, 6, 4, 1, 2));//5
  echo solution(array(1, 2, 3));//4
  echo solution(array(-1, -2));//1
?>
雍马鲁
2023-03-14
function solution($A) {
  $a = array_flip($A);
  for($i=1; isset($a[$i]);$i++);
  return $i;
}

解决方案的性能得分为100%!!

符正信
2023-03-14

不确定你想在代码中做什么,但是从1开始,检查并递增。只要在数组中找不到< code>$i,循环就会停止:

function solution($A) {
    for($i=1; in_array($i, $A); $i++);
    return $i;
}
 类似资料:
  • 我正在尝试以下练习来提高我的在线技能,我遇到了以下问题。 这是一个演示任务。 编写一个函数:class Solution{public int Solutions(int[]A);},给定一个包含N个整数的数组A,返回A中没有出现的最小正整数(大于0)。 举个例子, 给定 A = [1, 3, 6, 4, 1, 2],函数应返回 5。给定 A = [1, 2, 3],函数应返回 4。给定 A =

  • 问题内容: 我们需要在分配中递归地找到一个数组中的第二个最小整数。但是,为了更好地理解该主题,我想先通过本网站进行迭代,然后自己进行递归。 不幸的是,迭代地进行相当混乱。我知道该解决方案很简单,但我无法解决。 到目前为止,以下是我的代码: 这适用于一些数字,但不是全部。数字会变化,因为内部if条件的效率不如外部if条件的效率。 禁止阵列重排。 问题答案: 试试这个。当最小的数字是第一个时,第二个条

  • 把一个int型数组中的数字拼成一个串,这个串代表的数字最小。 #思路说明 对这个问题的理解: 有一个元素是int类型的list; 将上述list中的每个元素的数字分别取出来,然后将这些数字的顺序进行从新排列,并将其中的最小整数输入,就是题目中要求的最小数字。 如果按照上述理解,在解题中,最应当小心的是数字如果很大,比如list中的某个int元素是:2222222222222277777777777

  • 我在这里写了这两个方法来查找最小和最大值。#2是基于这篇文章的这个答案。 如果我运行这样的简单基准测试: } 我通常会得到这样的结果: 我把算法弄错了吗?我本以为至少会有类似的结果。

  • 我试图找到最小的整数中的只是使用两个简单的循环。我最初尝试了一个循环,但是它没有正确更新。我还没有学习,所以这应该在不使用任何代码的情况下完成。 这就是我所拥有的: 我的最小值似乎总是列表中的最后一个值,所以我尝试打印以查看发生了什么,它似乎会更新不同的值,最后更新最后一个值。我不知道为什么会这样。 这是它正在打印的内容,例如:

  • 我正在尝试解决一个leetcode类型问题,这是一个实践问题,它伴随着即将到来的代码测试,我需要为工作做一个,我遇到了麻烦。任何人都可以帮助我了解出了什么问题? 我基本上是在寻找暴力选项,因为我不知道algos/DS。 编写一个函数: 功能溶液(A); 给定一个包含 N 个整数的数组 A,返回 A 中未出现的最小正整数(大于 0)。 例如,给定A = [1,3,6,4,1,2],函数应该返回5。