老师麻烦帮忙看一下我这个算法

老师麻烦帮忙看一下我这个算法

这个是一个寻找第K个最小值的算法,但是按照下面这个思路每次返回的值都不一样。帮忙看一下问题出在哪里

var selectk = function(nums,l,j,k){
let p = partition(nums,l,j);
if(k===p){
return nums[p]
}
if(k<p){
console.log('k<p',p)
return selectk(nums,l,p-1,k)
}
console.log('k>p',p)
return selectk(nums,p+1,j,k)
}
var partition = function(arr,l,r){
let p = parseInt(Math.random()*r);
replace(arr,l,p);
let i = l+1;
let j = r;
console.log(arr,i,j)
// [3,2,1,5,6,4]
while(true){
while(i<=j&&arr[i]<arr[l]){
i++;
console.log('i-->',i)
};
while(j>=i&&arr[j]>arr[l]){
j--;
console.log('j-->',j)
}
if(i>=j){
break;
}
replace(arr,i,j);
i++;
j--;
}
replace(arr,l,j);
console.log("replace",arr)
return j;
}
var replace = function(arr,i,j){
let t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
liuyubobobo 2021-07-13 18:31:40

抱歉,你这样直接给我贴代码,也没有注释,没有一点思路说明或者你调试过程中的问题数据说明,我不能帮你调代码。


如果这是 Leetcode 上的问题,但不能通过测试,请给我题号。并且请确认你已经针对错误的测试用例进行了调试(或者错误的用例太大,你已经无法调试。)


如果这不是 Leetcode 上的问题,请给我一个你找到的最小的能够复现错误的测试用例,并且说明,在哪一步,你认为某一个变量的值应该是多少?实际却是多少?你不理解?


如果你的算法涉及随机,建议先将随机取消,以保证能够稳定复现错误。


调试代码不仅仅是学习算法,更是学习计算机的重要一环。一个软件工程师,80% 的时间都是调试代码的。进步就再这个过程中。


继续加油!:)

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师