码迷,mamicode.com
首页 > 其他好文 > 详细

笔试中的流程控制题

时间:2021-04-14 11:53:53      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:add   输入输出   imp   就是   lag   mes   时间表   时间   port   

最近做到了两个笔试中的这种题目,这里备注一下

大概就是需要你维护一个队列,然后根据一个什么过程模拟这个流程的进行

一个是华为笔试的题目:

 

 技术图片

 

 技术图片

 

 

这道题实际上就是维护一个队列,然后查表

然而题意确实很复杂,写输入输出也要很久,总的来说还是很难搞

import java.util.*;

public class Solution2 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String[] timeStr=sc.nextLine().split(",");
        //存第一行数据
        List<Integer> list=new ArrayList<>();
        for(int i=0;i<timeStr.length;i++)
        {
            list.add(Integer.parseInt(timeStr[i]));
        }

        //存第二行数据
        String[] relyStr=sc.nextLine().split(",");
        List<Integer[]> table=new ArrayList<>();
        for(String str:relyStr)
        {
            Integer[] rely=new Integer[2];
            rely[0]=Integer.parseInt(str.split("->")[0]);
            rely[1]=Integer.parseInt(str.split("->")[1]);
            table.add(rely);
        }
        //输出代码
        Solution2 solution2=new Solution2();
        List<Integer> resultList=solution2.solve2(list,table);
        for(int i=0;i<resultList.size();i++)
        {
            System.out.print(resultList.get(i));
            if(i!=resultList.size()-1)
            {
                System.out.print(",");
            }
        }

    }

    public List<Integer> solve2(List<Integer> time,List<Integer[]> table) {
        //time 时间表

        List<Integer> result = new ArrayList<>(time);//结果表
        HashSet<Integer> set = new HashSet<>();//已经执行完了吗
        Queue<Integer> line = new LinkedList<>();//排队表
        for (int i = 0; i < result.size(); i++) {
            line.add(i);//先进先出,序号为1的任务先执行
        }

        while (line.size() != 0) {
            int flag = 0;
            int test = line.poll();
            for (Integer[] fire : table) {
                if (fire[0] == test) {
                    if (!set.contains(fire[1])) {
                        line.add(test);
                        flag = 1;
                        break;
                    }
                }
            }
            if (flag == 0) {
                set.add(test);
                //都执行过了,该任务可以执行
                for (int i = 0; i < result.size(); i++) {
                    if (!set.contains(i)) {
                        result.set(i, result.get(i) + time.get(test));//每一个未执行过的都要加上刚刚的执行时间
                    }
                }
            }
        }
        return result;
    }

}

 

笔试中的流程控制题

标签:add   输入输出   imp   就是   lag   mes   时间表   时间   port   

原文地址:https://www.cnblogs.com/take-it-easy/p/14653768.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!