首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否返回数组中第二个不同值的索引?

是的,可以编写一个函数来返回数组中第二个不同值的索引。下面是一个示例的JavaScript代码:

代码语言:txt
复制
function getSecondDistinctIndex(arr) {
  let distinctValues = [];
  
  for (let i = 0; i < arr.length; i++) {
    if (!distinctValues.includes(arr[i])) {
      distinctValues.push(arr[i]);
      
      if (distinctValues.length === 2) {
        return i;
      }
    }
  }
  
  return -1; // 如果数组中没有第二个不同值,则返回-1
}

// 示例用法
const array1 = [1, 2, 2, 3, 4, 4, 5];
const array2 = [1, 1, 1, 1, 2, 2, 3, 3];
const array3 = [1, 2, 3, 4, 5];

console.log(getSecondDistinctIndex(array1)); // 输出: 3
console.log(getSecondDistinctIndex(array2)); // 输出: 4
console.log(getSecondDistinctIndex(array3)); // 输出: -1

这个函数会遍历数组,将遇到的不同值存储在distinctValues数组中。当distinctValues数组的长度达到2时,即找到了第二个不同值,函数会返回该值的索引。如果数组中没有第二个不同值,则返回-1。

这个函数的时间复杂度是O(n),其中n是数组的长度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PostgreSQL中索引是否存储空值?

据我所知,在oracle里索引是不存储null值的,所以is null走不了索引,在pg里is null可以走索引,说明null值在索引里面也进行了存储。下面分别对pg和oracle进行测试验证。...从上面执行计划对比可以看到pg走了索引,oracle没走索引,因此也验证了pg的btree索引是可以存储空值的。笔者也验证过mysql的btree索引也是存储空值的。...其实这引出来一个问题:索引到底应不应该存储空值?其实我个人觉得不应该存储,oracle里索引不存储null值应该也是经过考虑后做的优化。...因为在实际业务场景下,某个字段is null这一类的查询基本不会出现,没有实际意义,而且null值在实际场景里面会很多,很多字段都可能是null,如果这些null值都在索引键里面都进行存储,那么大大增加了索引的大小...,降低了索引扫描的效率,所以把null值排除在索引之外是一个优化,也希望未来pg能将这个功能引入。

2.3K40
  • 数组中某值是否重复问题

    , 10 1月 2021 作者 847954981@qq.com 我的编程之路, 算法学习 数组中某值是否重复问题 public static ArrayList repeat(int...// 否则将当前位置设置为1 exists[value] = 1; } } return result; } 分析: 在明确数组中数是有一定范围的情况下...,可以先定义另一个数组exist 该数组的长度为原数组中数的范围。...创建一个数组result储存重复值 遍历一遍原数组,每遍历到一个数就把其exist对应位置(如遍历到10则exist的第10个位置)的书变为1。...如果再次遍历到相同的数,判断到exist对应位置为1则代表有重复数并输出进result数组 此方法可以用于string 在一个string中 利用string.charAt(int)来获取每个位置的字符

    1.5K20

    js中如何判断数组中包含某个特定的值_js数组是否包含某个值

    array.indexOf 判断数组中是否存在某个值,如果存在返回数组元素的下标,否则返回-1 let arr = ['something', 'anything', 'nothing',...anything']; let index = arr.indexOf('nothing'); # 结果:2 array.includes(searchElement[, fromIndex]) 判断一个数组是否包含一个指定的值...numbers.includes(8); # 结果: true result = numbers.includes(118); # 结果: false array.find(callback[, thisArg]) 返回数组中满足条件的第一个元素的值...item.id == 3; }); # 结果: Object { id: 3, name: "nothing" } array.findIndex(callback[, thisArg]) 返回数组中满足条件的第一个元素的索引...方法,该方法返回元素在数组中的下标,如果不存在与数组中,那么返回-1; 参数:searchElement 需要查找的元素值。

    18.5K40

    如何检查 Java 数组中是否包含某个值 ?

    参考链接: Java程序检查数组是否包含给定值 作者 |  沉默王二  本文经授权转载自沉默王二(ID:cmower)  在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题。...比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深入地研究一下。  另外,我想要告诉大家的是,作为程序员,我们千万不要轻视这些基础的知识点。...如何检查数组(未排序)中是否包含某个值 ?这是一个非常有用并且经常使用的操作。我想大家的脑海中应该已经浮现出来了几种解决方案,这些方案的时间复杂度可能大不相同。  ...我先来提供四种不同的方法,大家看看是否高效。  ...实际上,如果要在一个数组或者集合中有效地确定某个值是否存在,一个排序过的 List 的算法复杂度为 O(logn),而 HashSet 则为 O(1)。

    9.1K20

    VBA数组的排序_vba函数返回值 数组

    大家好,又见面了,我是你们的朋友全栈君。 我们平时用的表格排序,只相对来说是在在表格中的升序降序。今天就好奇如果数组中实现排序 他是怎么实现的呢。...它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。...MinIndex = i '记录最小值的索引位置 For j = MinIndex + 1 To UBound(arr) If arr(j, 1) < MinValue Then MinValue...= arr(j, 1) MinIndex = j End If Next '以此和当前的最小值做对比,比较出后面的最小值并记录 值及索引的位置 '因为小的值我们都放在最前面,所以遍历只需从当前值的后面开始就可以了...如果第一个比第二个大,就交换他们两个。 2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3、针对所有的元素重复以上的步骤,除了最后一个。

    3.4K40

    Java中方法重载是否能够依靠返回值类型不同来区分?

    在Java编程语言中,方法重载是指在一个类中定义多个相同名称但参数列表不同的方法。通过方法重载,我们可以为同一动作提供多种实现方式。那么在Java中,方法重载是否能够依靠返回值类型不同来区分呢?...Java中,方法重载无法通过返回值类型来区分重载方法。 其主要原因有两点: 1、返回类型不参与方法签名 Java语言规范中描述了方法签名的概念,用于区分同一个类中的重载方法。...方法签名包括方法名称和参数列表(数量、顺序、类型),而不包括返回值类型。...尽管它们的返回类型不同,但它们的参数列表相同,因此它们不违反Java方法重载的规定。 2、反例容易出错 如果我们允许通过返回类型来区分方法重载,很容易造成反例,导致程序员的困惑和错误。...这将导致程序员的困惑和浪费时间。

    34720

    JavaScript判断数组中是否包含某个值「建议收藏」

    有下面几种方法可以实现: 方法一:array.indexOf 判断数组中是否存在某个值,如果存在,则返回数组元素的下标,否则返回-1。...1,2,3,4]; let index=arr.indexOf(3); console.log(index); 方法二:array.includes(searcElement[,fromIndex]) 此方法判断数组中是否存在某个值...("不存在"); 方法三:array.find(callback[,thisArg]) 返回数组中满足条件的第一个元素的值,如果没有,返回undefined let arr=[1,2,3,4]; let...item =>{ return item > 3 }); console.log(result); 方法四:array.findeIndex(callback[,thisArg]) 返回数组中满足条件的第一个元素的下标...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    2.3K10

    灵魂拷问:如何检查Java数组中是否包含某个值 ?

    在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题。比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深入地研究一下。...如何检查数组(未排序)中是否包含某个值 ?这是一个非常有用并且经常使用的操作。我想大家的脑海中应该已经浮现出来了几种解决方案,这些方案的时间复杂度可能大不相同。...我先来提供四种不同的方法,大家看看是否高效。...= null; } 从上面的源码可以看得出,contains() 方法调用了 HashMap 的 containsKey() 方法,如果指定的元素在 HashMap 的键中,则返回 true;否则返回...实际上,如果要在一个数组或者集合中有效地确定某个值是否存在,一个排序过的 List 的算法复杂度为 O(logn),而 HashSet 则为 O(1)。

    4.8K20

    ​day023: JS判断数组中是否包含某个值

    day023: JS判断数组中是否包含某个值 方法一:array.indexOf 此方法判断数组中是否存在某个值,如果存在,则返回数组元素的下标,否则返回-1。...1,2,3,4]; var index=arr.indexOf(3); console.log(index); 方法二:array.includes(searcElement[,fromIndex]) 此方法判断数组中是否存在某个值...("不存在"); 方法三:array.find(callback[,thisArg]) 返回数组中满足条件的第一个元素的值,如果没有,返回undefined var arr=[1,2,3,4]; var...arr.find(item =>{ return item > 3 }); console.log(result); 方法四:array.findeIndex(callback[,thisArg]) 返回数组中满足条件的第一个元素的下标...(result); 当然,for循环当然是没有问题的,这里讨论的是数组方法,就不再展开了。

    4.5K20

    前端面试 【JavaScript】— JS判断数组中是否包含某个值

    方法一:array.indexOf() 此方法判断数组中是否存在某个值,如果存在,则返回数组元素的下标,否则返回-1 var arr=[1,2,3,4]; var index=arr.indexOf(...3); console.log(index); // 2 方法二:array.includes() 此方法判断数组中是否存在某个值,如果存在返回true,否则返回false var arr=[1,2,3,4...]; if(arr.includes(3)){ console.log("存在"); }else{ console.log("不存在"); } 方法三:array.find() 返回数组中满足条件的第一个元素的值...(result); // 4 方法四:array.findIndex() 返回数组中满足条件的第一个元素的下标,如果没有找到,返回 -1 var arr=[1,2,3,4]; var result...= arr.findIndex(item =>{ return item > 3 }); console.log(result); // 3 当然,for循环当然是没有问题的,这里讨论的是数组方法

    3.9K30

    【Java】数组的常见操作以及数组作为方法参数和返回值

    数组作为方法参数和返回值 2.1 数组作为方法参数 2.2 数组作为方法返回值 2.3 方法的参数类型区别 代码分析 1....数组的索引是 0 到 lenght - 1 ,可以作为循环的条件出现。 1.4 数组获取最大值元素 最大值获取: 从数组的所有元素中找出最大值。...实现思路: 定义变量,保存数组 0 索引上的元素 遍历数组,获取出数组中的每个元素 将遍历到的元素和保存数组 0 索引上值的变量进行比较 如果数组元素的值大于了变量的值,变量记录住新的值...数组作为方法参数和返回值 2.1 数组作为方法参数 以前的方法中我们学习了方法的参数和返回值,但是使用的都是基本数据类型。...2.2 数组作为方法返回值 数组作为方法的返回值,返回的是数组的内存地址 2.3 方法的参数类型区别 代码分析 1. 分析下列程序代码,计算输出结果。 2.

    2.2K30

    Math.max()方法获取数组中的最大值返回NaN问题分析

    我们先简单看一下  Math.max() 方法: Math.max() Math.max() 函数返回一组数中的最大值。...返回值: 返回给定的一组数字中的最大值。 注意:如果给定的参数中至少有一个参数无法被转换成数字,则会返回 NaN。 问题解决 仔细观察可以发现,代码中使用了 ......解构,这没问题,ES6 语法是支持这样了,会把数组解构成一组值。 但这里的问题是 array 是一个二维数组,解构完还是一个数组,而非数字,所以返回 NaN 了。... ); 解决方法: var arr = [1,2,3,45,66] var num = Math.max.apply( null, arr ); console.log( num ); apply 的第二个参数是参数数组...未经允许不得转载:w3h5 » Math.max()方法获取数组中的最大值返回NaN问题分析

    4.4K20

    python中函数的返回值详解

    1.返回值介绍 现实生活中的场景: 我给儿子10块钱,让他给我买包烟。...这个例子中,10块钱是我给儿子的,就相当于调用函数时传递到参数,让儿子买烟这个事情最终的目标是,让他把烟给你带回来然后给你对么,,,此时烟就是返回值 开发中的场景: 定义了一个函数,完成了获取室内温度,...想一想是不是应该把这个结果给调用者,只有调用者拥有了这个返回值,才能够根据当前的温度做适当的调整 综上所述: 所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果 2.带有返回值的函数 想要在函数中把结果返回给调用者...:%d'%result) 结果: 1~100的累积和为: 5050 5.小总结 函数根据有没有参数,有没有返回值可以相互组合 定义函数时,是根据实际的功能需求来设计的,所以不同开发人员编写的函数类型各不相同...5.在python中我们可不可以返回多个值?

    3.3K20

    php中的索引数组和数组顺序问题

    先上结论 , php的索引数组不是传统的从0开始的整数索引数组 , 而是一个关联数组 , 是一个有序的键值对 ,这个序就是定义时候的顺序 $arr=array('a','b') $arr[0] 这个的输出肯定是...a $arr=array(1=>'a',0=>'b') $arr[0] 输出b 说明php的索引数组 , 也是一个键值对 , 键是0 , 值是b 当用foreach循环的时候 , 顺序是按照插入时的顺序遍历...输出 1====>a 0====>b 所以从这个里面我们就很可能会出现一个错误 , 当我们想要第一个数组元素的时候 $arr[0] 实际上不是真正的第一个元素 可以使用reset()来方便地获取数组的第一个值...,或者用end()获取最后一个值。...reset()将内部指针会重置到数组的开头 first=reset(arr);

    9.3K40
    领券