findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置
时间: 2024-04-05 22:29:20 浏览: 58
没错,你说得很对!`findIndex()` 方法会遍历数组中的每个元素,直到找到一个满足测试条件的元素,然后返回该元素在数组中的索引位置。如果数组中没有满足条件的元素,则返回 -1。需要注意的是,`findIndex()` 方法只会返回符合条件的第一个元素的索引位置。有没有什么其它问题我可以帮助你解答的呢?
相关问题
1、二分搜索问题 ⑴、设:a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最小元素位置j。当搜索元素在数组中时,I和j相同,均为x在数组中的位置。 ⑵、设:有n个不同的整数排好序后存放于t[0:n-1]中,若存在一个下标I,0≤i<n,使得t[i]=i,设计一个有效的算法找到这个下标。要求算法在最坏的情况下的计算时间为O(logn)。 ⑶、用I,j做参数,且采用传递引用或指针的形式带回值。
回答:"1、二分搜索问题"属于技术问题,我可以回答。
⑴、改写后的算法如下:
```
int binarySearch(int[] a, int x, int[] result) {
int low = 0;
int high = a.length - 1;
int i = -1, j = -1;
while (low <= high) {
int mid = (low + high) / 2;
if (a[mid] == x) {
i = mid;
j = mid;
break;
} else if (a[mid] < x) {
i = mid;
low = mid + 1;
} else {
j = mid;
high = mid - 1;
}
}
result[0] = i;
result[1] = j;
return i;
}
```
调用该函数时传入一个长度为2的整型数组,用于存放小于x的最大元素位置和大于x的最小元素位置。返回值为小于x的最大元素位置。
⑵、设计的算法如下:
因为数组t是已排好序的,因此可以采用二分搜索的方式查找。二分搜索要求每次将搜索范围缩小一半,因此可以考虑将数组中的下标和值相减,如果存在t[i]=i,则t[i]-i=0。假设现在搜索范围为[low, high],在每次判断中都将搜索区间缩小一半。如果t[mid]-mid>0,则应在左侧搜索;如果t[mid]-mid<0,则应在右侧搜索;如果t[mid]-mid=0,则找到了所要查找的下标。
实现的代码如下:
```
int findIndex(int[] t) {
int low = 0;
int high = t.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (t[mid] - mid > 0) {
high = mid - 1;
} else if (t[mid] - mid < 0) {
low = mid + 1;
} else {
return mid;
}
}
return -1;
}
```
该算法的最坏时间复杂度为O(logn)。
⑶、可以定义如下的函数签名:
```
void binarySearch(int[] a, int x, int& i, int& j);
int findIndex(int[] t);
```
其中第一个函数传入数组a、搜索元素x和两个引用参数i、j,返回值为搜索到的位置。第二个函数传入数组t,返回值为满足条件的下标,如果不存在则返回-1。
.findIndex
.findIndex()方法用于返回传入一个测试条件(函数)符合条件的数组第一个元素的索引位置。注意,当找到满足条件的元素后,之后的元素将不再执行测试条件函数。如果没有符合条件的元素,则返回-1。
在ES6中,Array增加了find()和findIndex()函数。find()函数用于查找目标元素,如果找到则返回该元素,找不到则返回undefined。findIndex()函数也是用于查找目标元素,如果找到则返回元素的位置,找不到则返回-1。
在TypedArray中,也有类似的函数。typedArray.find()函数用于找到满足条件的元素,如果找到则返回该元素,找不到则返回undefined。typedArray.findIndex()函数用于返回满足条件的元素在TypedArray中的索引,如果找不到则返回-1。
阅读全文