前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Lintcode 1667.石头

Lintcode 1667.石头

作者头像
全栈程序员站长
发布2022-09-15 11:30:43
1700
发布2022-09-15 11:30:43
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

题目大意:一条直线上有n个石头,一个人从左往右走,碰到奇数块石头(碰到一块石头数一个数,这里指数的数是奇数),就往右扔,碰到偶数的石头就不管他,如果两块石头在同一个位置,就扔大的那块(能扔的距离小的)。问最后最远的那块石头的位置。

思路:用优先队列模拟,每遇到奇数石头,就将其坐标加上D[i],放回优先队列,当石头重叠时,先扔投大的(能扔的距离小的),故在比较函数中,以位置为第一关键字,以投掷距离为第二关键字。

代码语言:javascript
复制
class Node {
        int p;
        int d;
    }

    public int getDistance(int[] p, int[] d) {
        PriorityQueue<Node> priorityQueue = new PriorityQueue<>((o1, o2) -> {
            if (o1.p == o2.p) {
                return o1.d - o2.d;
            } else {
                return o1.p - o2.p;
            }
        });

        Node res = null;

        for (int i = 0; i < p.length; i++) {
            Node node = new Node();
            node.p = p[i];
            node.d = d[i];
            priorityQueue.add(node);
        }
        boolean temp = true;
        while (!priorityQueue.isEmpty()) {
            res = priorityQueue.remove();
            if (temp) {
                res.p = res.p + res.d;
                priorityQueue.add(res);
            }
            temp = !temp;
        }
        return res.p;
    }

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163855.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档