老师麻烦帮忙看一下我这个算法
这个是一个寻找第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> |
12
收起
正在回答 回答被采纳积分+1
1回答
liuyubobobo
2021-07-13 18:31:40
抱歉,你这样直接给我贴代码,也没有注释,没有一点思路说明或者你调试过程中的问题数据说明,我不能帮你调代码。
如果这是 Leetcode 上的问题,但不能通过测试,请给我题号。并且请确认你已经针对错误的测试用例进行了调试(或者错误的用例太大,你已经无法调试。)
如果这不是 Leetcode 上的问题,请给我一个你找到的最小的能够复现错误的测试用例,并且说明,在哪一步,你认为某一个变量的值应该是多少?实际却是多少?你不理解?
如果你的算法涉及随机,建议先将随机取消,以保证能够稳定复现错误。
调试代码不仅仅是学习算法,更是学习计算机的重要一环。一个软件工程师,80% 的时间都是调试代码的。进步就再这个过程中。
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧