【发布时间】:2020-11-07 14:17:06
【问题描述】:
我正在尝试“CountDistinctSlices”的代码问题。我尽我最大的努力得分 30%,所以我试着去寻找这样做的人以获得洞察力。基本上我没有得到答案是使用初始化的seen 数组(和M 就此而言)以及它是如何使用的,知道它的人可以引导我完成这段代码。
这是我找到的答案,没有解释
function solution(M, A) {
// write your code in JavaScript (Node.js 8.9.4)
let sum = 0;
let front = 0;
let back = 0;
const seen = new Array(M+1).fill(false);
while (front < A.length && back < A.length){
while (front < A.length && seen[A[front]] !== true){
sum += (front-back+1);
seen[A[front]] = true;
front += 1;
}
while (A[back] !== A[front]){
seen[A[back]] = false;
back += 1;
}
seen[A[back]] = false;
back += 1;
}
return Math.min(sum, 1000000000);
}
这是完整的问题
一个整数 M 和一个由 N 个非负数组成的非空数组 A 给出整数。数组 A 中的所有整数都小于或等于 M.
一对整数 (P, Q),使得 0 ≤ P ≤ Q
例如,考虑整数 M = 6 和数组 A,这样: A[0] = 3 A[1] = 4 A[2] = 5 A[3] = 5 A[4] = 2
正好有九个不同的切片:(0, 0), (0, 1), (0, 2), (1, 1), (1, 2), (2, 2), (3, 3), (3, 4) 和 (4, 4)。
目标是计算不同切片的数量。
写一个函数:
function solution(M, A);给定一个整数 M 和一个由 N 组成的非空数组 A 整数,返回不同切片的数量。
如果不同切片的数量大于 1,000,000,000,则 函数应该返回 1,000,000,000。
例如,给定整数 M = 6 和数组 A,这样:
A[0] = 3 A[1] = 4 A[2] = 5 A[3] = 5 A[4] = 2该函数应返回 9,如上所述。
为以下假设编写一个有效的算法:
N is an integer within the range [1..100,000]; M is an integer within the range [0..100,000]; each element of array A is an integer within the range [0..M].
【问题讨论】:
-
这能回答你的问题吗? count distinct slices in an array
标签: javascript algorithm