写一个函数:
功能解决方案($ 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),超出输入存储(不计入输入参数所需的存储)。 可以修改输入数组的元素。
答案 0 :(得分:7)
function solution($A) {
$a = array_flip($A);
for($i=1; isset($a[$i]);$i++);
return $i;
}
100%性能得分的解决方案!!
答案 1 :(得分:4)
不确定您在代码中尝试做什么,但从1开始,检查并增加。只要在数组中找不到$i
,循环就会停止:
function solution($A) {
for($i=1; in_array($i, $A); $i++);
return $i;
}
答案 2 :(得分:0)
我可以看到你只需要所有的最小值,如果是这样的话,试试这个:
$cantArray = count($A); // size of the array
$smaller = 0; // Just the position
for($f = 1; $f < $cantArray; $f++){
if($A[$f] > 0){
if($A[$f] < $A[$smaller]){
$smaller = $f;
}
}
}
// At the end just print the smallest
echo $A[$smaller];
希望有所帮助
答案 3 :(得分:0)
检查此代码。
// your array
$array = [1, 3, 6, 4, 1, 2];
// define an empty array.
$new_array = array();
// get the max value from your array
$max_number = max($array);
// loop
for($i=1;$i<$max_number;$i++){
// check for existence in your array
if(!in_array($i,$array)){
// save to new array
$new_array[]=$i;
}
}
echo $small_int = empty($new_array) ? $max_number+1 : min($new_array);
答案 4 :(得分:0)
这就是我的想法
$array = [];
for($i=-100; $i<100; $i++) {
$array[] = rand(-100, 100);
$i++;
}
$newArray = array_filter($array, function($number) {
return $number > 0;
});
function getSmallesPositiveNumber($array) {
for($i=0; $i<=max($array); $i++) {
if (in_array($i+1, $array)) {
continue;
}
return $i+1;
}
}
print_r($newArray);
echo getSmallesPositiveNumber($newArray);
答案 5 :(得分:0)
查看此Java代码。
public static int solution(int[] a){
Arrays.sort(a); //O(nlogn)
int answer = 1; // O(1)
int positiveCounter = 1; // O(1)
for (int i = 0; i<=a.length; i++){
answer = positiveCounter;
if(i == a.length){
break;
}
if(a[i]<=0){
continue;
}
if(a[i] != positiveCounter){
break;
}
if(i == a.length-1){
positiveCounter++;
answer = positiveCounter;
break;
}
if(a[i+1] != positiveCounter){
positiveCounter++;
}
}
return answer;
}
答案 6 :(得分:0)
准确度88%
function solution($A) {
$max = max($A);
if($max < 0){
$max = 1;
}
$range = range(1,$max+1);
$diff = array_diff($range,$A);
$diff = array_values($diff);
return $diff[0];
}
答案 7 :(得分:0)
提示没有说数组是有序的,所以你不能只是递增。您也不想重复进行线性搜索,因为数组可能很大。存储在哈希集之类的东西中(用于快速查找),并跳过负数:
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
?>