簡體   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