当前位置:首页 » 《随便一记》 » 正文

Java实现 数组匹配,矩阵行排序

20 人参与  2022年11月15日 12:33  分类 : 《随便一记》  评论

点击全文阅读


分两个长度相等的经致数组 persons 和 prizes,其中 persons[i] 是初始队列里第 i 名员工欢的奖品 (i =0 是队首位置), prizes[j],这个过程会一直持续到队列没有员工,或所有剩余员工都不喜欢最顶上的奖品为止。是第了个奖品的英型(j0表示最顶上)请适回无法取到自己密欢的奖品的员工致量。
lass
示例1
输入 : persons = [0,1,1,0,1], prizes = [1,0,0,1,0]
队首的员工放奔最顶上的奖品,并回到队列的末尾,队列变为 persons = [1,1,0,1,@]。
输出:队首的员工拿走最顶上的奖品,并离开队列,队列变为 persons = [1,0,1,0],奖品为 prizes = [o,0,1,0]的释:队首的员工放弃最顶上的奖品,并回到队列的末尾,队列变为 persons = [,1,0,1]。队首的员工拿走最顶上的奖品,并离开队列,队列变为 persons = [1,0,1],奖品为 prizes = [e,1,0]。队首的员工放奔最顶上的奖品,并回到队列的末尾,队列变为 persons = [e,1,1]。队首的员工拿走最顶上的奖品,并离开队列,队列变为 persons = [1,1],奖品为 prizes = []e]。-队首的员工拿走最顶上的奖品,并离开队列,队列变为 persons = [1],奖品为 prizes = [e]。最后剩余的 名员工不喜欢最顶上的奖品,因此返回 1。
示例2:
输入: persons = [1,0,0,1,0], prizes = [0,0,1,0,1]
输出:0

题目是识别的,凑合着看吧

private static int getNumWithoutPrize(int[] persons,int[] prizes){//        System.out.println("------------------------------");//        int res = 0;        Queue<Integer> que = new LinkedList();        int pPrize = 0;        //遍历person        for(int pers = 0; pers<persons.length; pers++){            //没找到想要的礼物            if(persons[pers] != prizes[pPrize]){                que.add(persons[pers]);            }else{                //找到                pPrize++;                continue;            }        }        int queSize = 0;        int i=0;        while(!que.isEmpty()){            int tmp = (int)que.poll();            queSize = que.size();            if(tmp == prizes[pPrize]){                pPrize++;                i=0;            }else{                i++;                que.add(tmp);                if(queSize<=i)                    break;            }        }        return que.size();    }

解目:因为同一型门的所有员工必须乘同一辆车,所以必须选择核载人数大于等于部门人数的车辆局出:0
日斯目法述
1 万至 plans0] 最少的要空位为: (12-10)+(8-8)+(15-15)=2dept0]10选用plans0]2]的车型,其核人数为12,大于等于10opt(1]e8这用plans(0[0]的车型,其核载人数为8,大于等于8lepts2]15选用 plans(0]1]的车型,其核载人数为 15大等于15空位为: (15-10)+(15 8)+(15-15)= 12注意:1)只使用了核载人数 15 的车型(不同部门可租同一型号的车),其他车型未使用方至plans(1]最少的deptsl1]两个部门,不能搭乘在一个核载人数为20的车上2)不允许扔车,如:depts(0方 plans2] 最少的总空位为:(15-10)+(8-8)+(15-15)=5方案0、1、2的总空位分别是2、12、5,因此选择 plans[0],返回下标0
东例2
融人: depts =[5, 9]plans = [[4],[6, 10),[5, 11]
称出:1)方 plans(0]无法满足搭乘条件2)方 plansl1]最少的空位为: (6-5)+(10-9)=2:3)方 plans/2]最少的总空位为: (5-5)+(11-9)=2plans[1]和 plans[2]的最少空位均为 2,返回其中下标最小的 1
示例3;
输入: depts= [10,10]plans = [[2, 9,8, 31.[7]]
解释:由于同一部门的所有员工需要搭乘同一辆车,不允许将同一部门的员工拆分乘坐,所给方案中最大的车型核载人数不足 10人,因此没有符合要
输出: -]
求的方案,返回-1。

private static int rentCars(int[] depts,int[][] plans){        int res = 0;        Arrays.sort(depts);//对部门升序排序        int plansNum = plans.length;        for(int i=0;i<plansNum;i++)            Arrays.sort(plans[i]);//对方案升序排序        int[] min = new int[plansNum];        for(int i=0;i<min.length;i++){            min[i] = Integer.MAX_VALUE;        }        //遍历方案        for(int i=0;i<plansNum;i++){            int pPlan = 0;//每次方案指针重置为0            int pDep = 0;//部门同            while(pDep < depts.length && pPlan<plans[i].length){                //<= 坐得下的情况                if(depts[pDep] <= plans[i][pPlan]){                    int tmp = plans[i][pPlan] - depts[pDep];                    if(min[i]==Integer.MAX_VALUE){                        min[i] = tmp;                    }else{                        min[i] += tmp;//统计差值                    }                    pDep++;//下一个部门                }else{                    //坐不下                    pPlan++;//考虑下一个更大的车                }            }        }        int tmp = Integer.MAX_VALUE;        for(int i=0;i<min.length;i++){            if(min[i]<tmp){                tmp = min[i];                res = i;            }        }        return  res;    }

点击全文阅读


本文链接:http://zhangshiyu.com/post/48500.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1