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

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

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

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


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

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

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

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


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


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


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


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


继续加油!:)

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

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

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

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

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

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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