查找数组中第一个出现序列的中心索引
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);
【讨论】:
以上是关于查找数组中第一个出现序列的中心索引的主要内容,如果未能解决你的问题,请参考以下文章