查找数组中第一个出现序列的中心索引

Posted

技术标签:

【中文标题】查找数组中第一个出现序列的中心索引【英文标题】:Find the center index of first occurrence sequence in an array 【发布时间】:2020-02-29 18:53:55 【问题描述】:

我想找到给定的第一个出现序列的中心点(索引) 大型数组

中的多个字符串

例如:

var array = ["c6dafc", "c6dafc", "1d2129", "1d2129", "1d2129", "cfcfff", "cfcfff", "ffffff", "1d2129", "1d2129", "1d2129", "1d2129"]

函数调用:(尝试根据1d2129查找中心索引,如果找不到则搜索32cd32

var result = somefunction(["1d2129", "32cd32"]);

在上面的例子中,结果应该返回3,因为1d2129的第一个出现序列是2,最后一个是4而不是11。如果1d2129 没有出现,那么应该搜索32cd32

注意:如果出现的数字是奇数应该返回中心索引,如果出现偶数应该返回centerPoint - 1

【问题讨论】:

那么到目前为止你尝试过什么? 你自己试试吧:P 我试过了,但性能不是很理想。 function somefunction(...array) ... 是由什么组成的?干酪?还是真正活生生的 javascript 【参考方案1】:

1) 遍历搜索词列表 2)对于每个单词,找出第一次出现。如果出现,则找出序列中的最后一个。 3)从第一个和最后一个索引中找出中心出现。 4) 如果没有找到,则移动到下一个搜索词。

const somefunction = (data, arr) => 
  let i = 0;
  while (i < arr.length) 
    const search = arr[i];
    const first_index = data.findIndex(item => item === search);
    if (first_index > -1) 
      let last_index = first_index;
      while (data[last_index + 1] === search) 
        last_index++;
      
      return Math.floor((first_index + last_index) / 2);
     else 
      i++;
    
  
  return -1; // not found at all
;

var array = [
  "c6dafc",
  "c6dafc",
  "1d2129",
  "1d2129",
  "1d2129",
  "cfcfff",
  "cfcfff",
  "ffffff",
  "1d2129",
  "1d2129",
  "1d2129",
  "1d2129"
];

var result = somefunction(array, ["1d2129", "32cd32"]);

console.log(result);

【讨论】:

以上是关于查找数组中第一个出现序列的中心索引的主要内容,如果未能解决你的问题,请参考以下文章

在Python中查找给定数组中最小值的索引

在 C# 中查找子数组的第一个出现/起始索引

怎么查找python列表中元素的位置

字符流中第一个不重复的字符

剑指Offer题目索引

利用正则来查找字符串中第n个匹配字符索引