繁体   English   中英

我在网上发现的该函数的时间复杂度为O(n)吗?

[英]Is the time complexity of this function I found online O(n)?

我正在尝试在LeetCode上解决此问题 ,以下是我在网上找到的解决方案:

 // use quick select var findKthLargest = function(nums, k) { var smaller = []; var larger = []; var pivot = nums[parseInt(nums.length/2)]; var pivotCnt = 0; for (var i = 0; i < nums.length; i++) { var num = nums[i]; if(num > pivot) { larger.push(num); } else if(num < pivot) { smaller.push(num); } else { pivotCnt++; } } if (k <= larger.length) { // if larger includes k return findKthLargest(larger, k); } else if (k - larger.length - pivotCnt <= 0) { // k is part of pivot return pivot; } else { // if smaller inclues k return findKthLargest(smaller, k - larger.length - pivotCnt); } }; 

现在,我相信这是一个O(n)解决方案,因为最坏的情况是我们遍历整个数组,但是我不确定。

您的功能似乎正在使用某种分而治之的方法。 对于每个调用,它都会使单个O(n)在输入数组上传递,将大于和小于某个特定轴的值存储到两个单独的数组中。 然后,它对适当的子数组进行递归调用。 一般情况下,它将输入数组的大小除以2,直到仅对大小为1的数组进行递归调用为止,这是基本情况。

我估计此函数的运行时间为O(n*lgn) ,这是分而治之算法的典型值。 每个调用都执行O(n)工作,并且通常会有O(lgn)个递归调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM