经典指数          
原因
1763
浏览数
0
收藏数
 

给定N个磁盘,每个磁盘大小为D,i=0...N-1,现在要在这N个磁盘上"顺序分配"M个分区,每个分区大小为P[j], j=0....M-1,顺序分配的意思是:分配一个分区P[j]时,如果当前磁盘剩余空间足够,则在当前磁盘分配;如果不够,则 尝试下一个磁盘,直到找到一个磁盘D[i+k]可以容纳该分区,分配下一个分区P[j+1]时,则从当前磁盘D[i+k]的剩余 空间开始分配,不在使用D[i+k]之前磁盘末分配的空间,如果这M个分区不能在这N个磁盘完全分配,则认为分配失败,请实现函数,is_allocable判断给定N个磁盘(数组D)和M个分区(数组P),是否会出现分配失败的情况。 举例:磁盘为[120,120,120],分区为[60,60,80,20,80]可分配 ,如果为[60,80,80,20,80]则分配失败。

     举报   纠错  
 
切换
1 个答案

public static void main(String[] args)

{

    int[] d = { 120, 120, 120 };// 磁盘

    // int[] p = { 60, 60, 80, 20, 80 };// 分区

    int[] p = { 60, 80, 80, 20, 80 };// 分区

    if (is_allocable(d, p))

    {

        System.out.println("分配成功");

    }

    else

    {

        System.out.println("分配失败");

    }

}

private static boolean is_allocable(int[] d, int[] p)

{

    int pindex = 0;//记录已分配的分区

    boolean isAllocable = false;//用来记录是否分配成功

    for (int i = 0; i < d.length; i++)  //对所有磁盘遍历

    {

        while (d[i] > 0)  //如果该磁盘还有剩余空间,就一直迭代

        {

            if (p[pindex] <= d[i])  //如果磁盘空间足够,就分配,否则,进入下一个磁盘

            {

                d[i] -= p[pindex++];

                if (pindex == p.length)  //如果已分配的分区数跟传入的一值,意味着分配成功

                {

                    isAllocable = true;

                    break;

                }

            }

            else

            {

                break;

            }

        }

        if (isAllocable)

        {

            break;

        }

    }

    return isAllocable;

}

 
切换
撰写答案