• c#数组排列系列2


    题目

    重新排列一个数组,使得 arr[i] = i

    给定一个长度为 N 的元素数组,范围从 0 到 N – 1。数组中可能不存在所有元素。 如果元素不存在,则数组中将存在 -1。 重新排列数组,使 A[i] = i,如果 i 不存在,则在该位置显示 -1。

    Examples :
    Input : arr = {-1, -1, 6, 1, 9, 3, 2, -1, 4, -1}
    Output : [-1, 1, 2, 3, 4, -1, 6, -1, -1, 9]


    方法1

    static void fixArray(int[] ar, int n)
    {
        int i, j, temp;
            
        for(i = 0; i < n; i++)
        {
            for(j = 0; j < n; j++)
            {
                if (ar[j] == i)
                {
                    temp = ar[j];
                    ar[j] = ar[i];
                    ar[i] = temp;
                    break;
                }
            }
        }
        
        for(i = 0; i < n; i++)
        {
            if (ar[i] != i)
            {
                ar[i] = -1;
            }
        }
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    时间复杂度 : O(n^2)


    方法2

    public static int[] fix(int[] A)
    {
        for (int i = 0; i < A.Length; i++)
        {
            if (A[i] != -1 && A[i] != i)
            {
                int x = A[i];
    
                while (A[x] != -1 && A[x] != x)
                {
                    int y = A[x];
                    A[x] = x;
                    x = y;
                }
    
                A[x] = x;
    
                if (A[i] != i)
                {
                    A[i] = -1;
                }
            }
        }
        return A;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    时间复杂度 : O(n)
    空间复杂度 : O(1)


    方法3

    1)将数组中存在的所有数字存储到一个集合中
    2)遍历数组的长度,如果对应的位置元素存在于Set中,则设置A[i] = i,否则A[i] = -1

    static void fix(int[] a,int n)
    {
        HashSet hs=new HashSet();
            
        for(int i=0;i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    时间复杂度 : O(n)
    空间复杂度 : O(n)

  • 相关阅读:
    React中的key有什么作用?
    Docker实战:Docker安装nginx并配置SSL
    Mysql命令增加、修改、删除表字段
    windows命令行安装工具/包/软件后,命令行命令找不到(npm示例)
    vue2/3 tab栏切换 可左右滑动的处理
    springboot shiro vue使用websocket案例
    [C]这些指针笔试题你都学废了吗?
    管理者的三抓三放
    devtools安装
    【pytorch笔记】第五篇 torchvision,Dataloader,nn.Module的使用
  • 原文地址:https://blog.csdn.net/a_codecat/article/details/128013087