首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于快速选择功能

关于快速选择功能
EN

Stack Overflow用户
提问于 2021-03-24 03:56:32
回答 1查看 21关注 0票数 0

首先,感谢您的帮助!我的问题是我试图找到最大的第k个测试用例,但有些测试用例失败了。如果参数是1, 1 ,1并且k=1,它将命中未定义的基本情况。我不知道为什么它会命中基本情况。再次,非常感谢你!如果你们需要更多信息,请告诉我!

代码语言:javascript
复制
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))

EN

回答 1

Stack Overflow用户

发布于 2021-03-24 04:19:38

你在找这样的东西吗?

代码语言:javascript
复制
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))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66770417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档