[英]What is the time complexity of this C++ code
我剛剛開始學習時間復雜度,我如何找到以下代碼的時間復雜度
vector<int> nums = {3,2,4,5,1,6,7,1,8,2,6,9} //say size n;
int j = 0;
for(int i=n-1;i>j;i--)
{
if(nums[i]>nums[j])
{
swap(nums[i],nums[j]); //simple swap function
reverse(nums.begin()+j+1,nums.end()); //std::reverse function from STL
return;
}
}
單獨考慮循環時,時間復雜度為 O(n)。 但是考慮里面的函數和返回呢? 我想知道它如何影響時間復雜度。
任何幫助表示贊賞,謝謝
這是 O(N)。
num[i] > num[0]
,for 循環將迭代序列,不會發生交換或反轉,您就完成了。 在)。num[i] > num[0]
為true 的情況下,您將交換一對(O(1)),迭代剩余的序列並反轉它們(O(N)),並且再次,您完成了艱難的return;
.即,這是 O(N)。
交換函數本質上是 O(1) 作為交換兩個索引的一組操作數。 另一方面,反向函數是 O(n),因為它遍歷整個數組以將其反向,如文檔所示
因此,考慮到您要反轉數組 n 次(假設 j 在 for 循環中可以為 0),如果您沒有 return 語句,我會說您的復雜性達到 O(n^2)。
使用 return 語句,您不會在每次迭代中反轉數組,而只是在退出后反轉一次。 所以 O(n)(for loop) + O(n)(reverse) = O(n)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.