首先,感谢您的帮助!我的问题是我试图找到最大的第k个测试用例,但有些测试用例失败了。如果参数是1, 1 ,1并且k=1,它将命中未定义的基本情况。我不知道为什么它会命中基本情况。再次,非常感谢你!如果你们需要更多信息,请告诉我!
function kth_largest_in_an_array(numbers, k) {
return quickSort3(numbers, k, 0, numbers.length-1);
}
const quickSort3 = (numbers, k, start, end) => {
if (start >= end) {
console.log('base case')
return;
}
//remember random index
console.log('before: ', numbers)
let randomIdx = Math.floor(start + Math.random() * (end - start));
let partitionedIdx = partition(numbers, start, end, randomIdx);
console.log('randomIdx: ',randomIdx)
console.log('partitionedIdx: ',partitionedIdx)
console.log('start: ', start, 'end: ', end)
console.log(numbers.slice(start, end+1))
console.log(numbers)
console.log('number.length: ',numbers.length)
//numbers.length = 5, 5-2 == 3
// console.log('numbers.length - k: ', numbers.length - k)
if (numbers.length - k === partitionedIdx) {
console.log('imin: ', numbers[partitionedIdx])
return numbers[partitionedIdx];
}
else if (partitionedIdx < numbers.length - k) {
return quickSort3(numbers, k, partitionedIdx+1, end);
}
else {
return quickSort3(numbers, k, start, partitionedIdx-1)
}
}
const partition = (numbers, start, end, randomIdx) => {
[numbers[start], numbers[randomIdx]] = [numbers[randomIdx], numbers[start]];
let pivot = numbers[start];
let i = start;
for (let j = i+1; j<=end; j++) {
if (pivot > numbers[j]) {
i++
[numbers[i], numbers[j]] = [numbers[j], numbers[i]];
}
}
[numbers[start], numbers[i]] = [numbers[i], numbers[start]];
return i;
}
console.log(kth_largest_in_an_array([1,1,1], 1))
// console.log(kth_largest_in_an_array([4, 1, 2, 2, 3, 4], 2))
// console.log(kth_largest_in_an_array([5, 1, 10, 3, 2], 2))
发布于 2021-03-24 04:19:38
你在找这样的东西吗?
const t = (arr, kth) => {
const a = arr.sort((a, b) => b - a);
return a[kth];
}
console.log(t([1,1,1], 1))
console.log(t([4, 1, 2, 2, 3, 4], 2))
console.log(t([5, 1, 10, 3, 2], 2))
https://stackoverflow.com/questions/66770417
复制相似问题