【006】1503. 所有蚂蚁掉下来前的最后一刻【简单模拟+逻辑转化】

所有蚂蚁掉下来前的最后一刻

有一块木板,长度为 n 个 单位 。一些蚂蚁在木板上移动,每只蚂蚁都以 每秒一个单位 的速度移动。其中,一部分蚂蚁向 左 移动,其他蚂蚁向 右 移动。
当两只向 不同 方向移动的蚂蚁在某个点相遇时,它们会同时改变移动方向并继续移动。假设更改方向不会花费任何额外时间。
而当蚂蚁在某一时刻 t 到达木板的一端时,它立即从木板上掉下来。
给你一个整数 n 和两个整数数组 left 以及 right 。两个数组分别标识向左或者向右移动的蚂蚁在 t = 0 时的位置。请你返回最后一只蚂蚁从木板上掉下来的时刻。

https://leetcode.cn/problems/last-moment-before-all-ants-fall-out-of-a-plank/

  1. 很唬人的题目,蚂蚁是否转向并不影响掉落所需的时间
/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
 */

package com.huawei.prac;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

class SolutionSt {
    public static void main(String[] args) {
        int n = 4;
        int[] left = {4, 3};
        int[] right = {0, 1};
        int n1 = 7;
        int[] left1 = {};
        int[] right1 = {0, 1, 2, 3, 4, 5, 6, 7};
        System.out.println(getLastMoment(n, left, right));
        System.out.println(getLastMoment(n1, left1, right1));
    }

    /**
     * 1503. 所有蚂蚁掉下来前的最后一刻[简单模拟+逻辑转化]
     *
     * @param n 木板长度【0-n】
     * @param left 向左移动的蚂蚁
     * @param right 向右移动的蚂蚁
     * @return 所有蚂蚁掉落的时间
     */
    public static int getLastMoment(int n, int[] left, int[] right) {
        //List leftList = new ArrayList<>(Arrays.asList(ArrayUtils.toObject(left)));
        List<Integer> leftList = Arrays.stream(left)
            .boxed()
            .sorted(Comparator.comparing(Function.identity()))
            .collect(Collectors.toList());
        //List rightList = new ArrayList<>(Arrays.asList(ArrayUtils.toObject(right)));
        List<Integer> rightList = Arrays.stream(right)
            .boxed()
            .sorted(Comparator.comparing(Function.identity()))
            .collect(Collectors.toList());
        int leftTime = 0;
        if (!leftList.isEmpty()) {
            leftTime = leftList.get(leftList.size() - 1);
        }
        int rightTime = 0;
        if (!rightList.isEmpty()) {
            rightTime = n - rightList.get(0);
        }
        return Math.max(leftTime, rightTime);
    }
}

你可能感兴趣的:(每日一题,java,算法,开发语言)