繁体   English   中英

这段代码的时间复杂度和空间复杂度?

[英]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.

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