[英]Time Complexity And Space Complexity Of This Code?
这段代码的时间和空间复杂度是多少?
这是将任何数组的所有负元素移动到数组末尾的代码,同时保持所有非负元素和负元素的顺序 - 如,
输入:{-11,-1,3,24,-7,-5,11,-6}
Output:{3、24、11、-11、-1、-7、-5、-6}
public static void MoveNegativeElementsToEnd(int arr[])
{
int k=arr.length-1;
int n=arr.length;
for(int i=n-1;i>=0;i--){
if(arr[i]<0){
for(int j=i;j<k;j++){
swap(arr,j,j+1);
}
k--;
}
}
}
public static void swap(int[] arr, int a, int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
阿科。 对我来说,时间复杂度是 O(N^2),
n -> 用于遍历数组
n -> 用于每次将负元素交换到末尾。 这样对吗?
并且空间复杂度是 O(1),因为对于所有输入,它都采用相同的编号。 变量?
内循环运行n-1-i
次(运行时)。 假设数组元素的概率p
为负,则每个元素都贡献p(n-1-i)
交换。 现在你对[n-1, 0]
中的i
求和,即[0, n-1]
中的n-1-i
,预期成本是
p(n-1)n/2
互换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.