力扣周赛第208场 - 今日份快乐!

力扣周赛第208场 - 今日份快乐!

  今天是具有纪念意义的一天!首次在周赛中做出来了两道题,四舍五入等于三个题吧!因为第三个题在11:57分的时候提交报错了,然后找了一下错误,在12:01提交成功(明明我从IDEA复制代码的时候还是12:00!哼!),结果运行超时了,不过136个测试用例通过了126个~咋这么一说好像也没有多厉害呢…但是要知道之前做周赛都是只做出来一个题啊!最多的时候也就是做出来一个题,第二个题超时,这次做题的时候真真切切看到了这段时间的进步,然后做题的时候思路也很明朗,不管!反正就是开心!嗷!而且提交上去的两个题都是提交一次就通过了哎!平时刷题都很少这么顺利的哈哈哈哈

下面是周赛题目和做法~

5523. 文件夹操作日志搜集器
	public int minOperations(String[] logs) {
        //哎呀这不就是树结构嘛!就是让我咋走我咋走,走到新文件就创建一个节点添加进去就行啦
        if (logs.length == 0) return 0;
        FileNode main = new FileNode("Main", null);
        FileNode curNode = main;
        for (int i = 0; i < logs.length; i++) {
            curNode = moveNode(curNode,logs[i]);
        }

        return goMain(curNode, 0);
    }

    private int goMain(FileNode curNode, int step) {
        if (curNode.father == null) return step;
        return goMain(curNode.father,step+1);
    }

    public FileNode moveNode(FileNode node, String log) {
        if (log.equals("../")) {
            if (node.father != null) {
                return node.father;
            }
            return node;
        }
        if (log.equals("./")) {
            return node;
        }
        return new FileNode(log.substring(0,log.length() - 1),node);
    }

    class FileNode {
        String name;
        List<FileNode> children;
        FileNode father;

        public FileNode(String name, FileNode father) {
            this.name = name;
            this.father = father;
        }
    }
5524. 经营摩天轮的最大利润

嗯就是这个超出时间限制了

	public int minOperationsMaxProfit(int[] customers, int boardingCost, int runningCost) {
        //嗯...超出时间限制了耶
        // 126 / 136 个通过测试用例
        // 你简直是太棒了喂!
        //什么时候利润最大...动态规划?贪心算法?感觉不是很像动态规划呀
        //怎么知道利润在此时最大呢?就是如果盈利就应该工作,如果不盈利就不工作
        //嗷那就把每次拉完客的盈利记录下来,然后获取最大值就行了啊!机智!

        //每次运行,计算出下次的客人即可,然后
        int remaining = 0;
        for (int i = 0; i < customers.length; i++) {
            int curTotal = remaining + customers[i];
            if (curTotal > 4) {
                remaining = curTotal - 4;
                cus.addLast(4);
            } else {
                cus.addLast(curTotal);
            }
        }
        if (remaining > 0) {
            while (remaining > 0) {
                if (remaining > 4) {
                    cus.addLast(4);
                    remaining -= 4;
                } else {
                    cus.addLast(remaining);
                    remaining = 0;
                }
            }
        }
        go(boardingCost, runningCost);

        int amount1 = -1;
        int maxCount = -1;
        if (amount.size() > 0) {
            Iterator<Integer> iterator = amount.iterator();
            for (int i = 0; i < amount.size(); i++) {
                Integer next = iterator.next();
                if (next > amount1) {
                    amount1 = next;
                    maxCount = i + 1;
                }
            }
        }

        return amount1 > 0 ? maxCount : -1;
    }

    private void go(int boardingCost, int runningCost) {
        if (cus.size() <= 0) return;
        Integer count = cus.pop();
        int curAmount = count * boardingCost - runningCost;
        Integer last = 0;
        if (amount.size() > 0) {
            last = amount.getLast();
        }
        amount.addLast(curAmount + last);
        go(boardingCost,runningCost);
    }
    LinkedList<Integer> cus = new LinkedList<>();

    LinkedList<Integer> amount = new LinkedList<>();
5525. 皇位继承顺序
	class ThroneInheritance {
        Person king;
        HashMap<String, Person> map = new HashMap<>();

        class Person {
            String name;
            List<Person> children = new LinkedList<>();
            boolean living = true;

            public Person(String name) {
                this.name = name;
                map.put(name,this);
            }
        }
        //当前King
        //King的后代以及King的后代的后代,即有一个人这样的节点

        public ThroneInheritance(String kingName) {
            king = new Person(kingName);
        }

        public void birth(String parentName, String childName) {
            Person parent = map.get(parentName);
            Person child = new Person(childName);
            parent.children.add(child);
        }

        public void death(String name) {
            Person person = map.get(name);
            person.living = false;
        }

        public List<String> getInheritanceOrder() {
            List<String> list = new LinkedList<>();
            return getInheritanceOrder(map.get("king"),list);
        }

        public List<String> getInheritanceOrder(Person parent, List<String> order) {
            if (parent.living) order.add(parent.name);
            if (parent.children != null && parent.children.size() > 0) {
                for (Person child : parent.children) {
                    getInheritanceOrder(child, order);
                }
            }
            return order;
        }
    }
5526. 最多可达成的换楼请求数目

这个还不会~应该是图

Over~

balabalabala…

嘿嘿嘿,首次进入一千名,开心!

在这里插入图片描述

第207场还是这个样子的
在这里插入图片描述

天哪!刚才发现一件惊恐的事情,勾上显示全球的排名…e…看来还是有很多有志之士的!不过还是先看全国排名吧~

哎话说这个全站排名咋还不更新啊,前几天嗖嗖地就从九万多名跑到了八万多名,然后我就给自己定了个今年达到三万名的小目标,结果它就不动了…给点面子啊喂!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值