用javascript语言写一个一个整数数组,找出其中最小的正整数的index,若找不到则返回 -1。如输入:[-1,0,1,2,3],返回 2。要求只遍历一次的代码
时间: 2023-09-09 14:06:23 浏览: 140
可以使用哈希表来实现,先遍历一遍数组,将所有正整数存入哈希表中。然后再遍历一遍数组,找到第一个在哈希表中不存在的正整数,即为最小正整数。
代码如下:
```javascript
function findMinPositiveIndex(arr) {
const hash = {};
for (let i = 0; i < arr.length; i++) {
if (arr[i] > 0) {
hash[arr[i]] = true;
}
}
for (let i = 1; i <= arr.length; i++) {
if (!hash[i]) {
return i - 1;
}
}
return -1;
}
// 测试
const arr = [-1, 0, 1, 2, 3];
console.log(findMinPositiveIndex(arr)); // 输出 2
```
在第二次遍历时,注意要从 1 开始,因为最小正整数一定不小于 1,而要返回数组中的下标,所以最后返回的是 i - 1。
相关问题
一个整数数组找出其中最小的正整数的index,若找不到返回-1要求只遍历一次,用JavaScript编写
可以使用桶排序的思想来实现:
```javascript
function findSmallestPositiveIntegerIndex(nums) {
const n = nums.length;
// 将所有小于等于0的数替换为n+1
for (let i = 0; i < n; i++) {
if (nums[i] <= 0) {
nums[i] = n + 1;
}
}
// 将每个出现过的正整数作为下标,将对应位置上的数取相反数
for (let i = 0; i < n; i++) {
const num = Math.abs(nums[i]);
if (num <= n) {
nums[num - 1] = -Math.abs(nums[num - 1]);
}
}
// 找到第一个大于0的数的下标
for (let i = 0; i < n; i++) {
if (nums[i] > 0) {
return i;
}
}
// 找不到则返回-1
return -1;
}
```
使用示例:
```javascript
const nums = [3, 4, -1, 1];
const index = findSmallestPositiveIntegerIndex(nums);
console.log(index); // 2
```
时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。
js实现一个整数数组,找出其中最小的正整数的index,若找不到则返回-1.如输入:[-1,0,1,2,3],返回2。要求只遍历一次
好的,可以使用JavaScript实现该算法,以下是示例代码:
```javascript
function findSmallestPositiveIntegerIndex(arr) {
let minPositiveInt = Infinity;
let minPositiveIntIndex = -1;
for (let i = 0; i < arr.length; i++) {
if (arr[i] > 0 && arr[i] < minPositiveInt) {
minPositiveInt = arr[i];
minPositiveIntIndex = i;
}
}
return minPositiveIntIndex;
}
const arr = [-1, 0, 1, 2, 3];
const result = findSmallestPositiveIntegerIndex(arr);
console.log(result); // 输出 2
```
解释一下实现思路:
1. 首先定义两个变量 `minPositiveInt` 和 `minPositiveIntIndex`,分别表示最小的正整数和其在数组中的下标,将 `minPositiveInt` 初始化为正无穷,`minPositiveIntIndex` 初始化为 -1。
2. 遍历数组,如果当前元素为正整数且小于 `minPositiveInt`,则将当前元素赋值给 `minPositiveInt`,同时更新 `minPositiveIntIndex` 为当前下标。
3. 遍历结束后,如果 `minPositiveIntIndex` 仍为 -1,则说明数组中没有正整数,返回 -1;否则返回 `minPositiveIntIndex`。
4. 由于只遍历了一次数组,所以时间复杂度为 O(n)。
希望能够帮到您,如有疑问请随时追问。
阅读全文