华为OD机试 - 堆栈中的剩余数字 - 逻辑分析(Java 2023 B卷 200分)

news2025/1/16 4:49:56

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
      • 1、输入
      • 2、输出
      • 3、说明
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

向一个空栈中依次存入正整数,假设入栈元素 n(1<=n=2^31-1)按顺序依次为 nx…n4、n3、n2、n1,每当元素入栈时,如果 n1=n2+…+ny(y 的范围[2,x],1<=x<=1000),则 n1~ny 全部元素出栈,重新入栈新元素 m(m=2*n1)。

如: 依次向栈存入 6、1、2、3, 当存入 6、 1、2 时,栈底至栈顶依次为[6、 1、2]; 当存入 3 时 3=2+1,3、2、1 全部出栈,重新入栈元素 6(6=2*3),此时栈中有元素 6;因为 6=6,所以两个 6 全部出栈,存入 12,最终栈中只剩一个元素 12。

二、输入描述

使用单个空格隔开的正整数的字符串,如”5 6 7 8”,左边的数字先入栈,输入的正整数个数为,1<=X<=1000

三、输出描述

最终栈中存留的元素值,元素值使用空格隔开,如”8 7 6 5”,栈顶数字在左边6 1 2 3

1、输入

5 10 20 50 85 1

2、输出

1 170

3、说明

5 + 10 + 20 + 50 = 85

2 * 85入栈,1入栈,输出 1 170

四、解题思路

  1. 输入若干个数字,空格分割,放入数组arr;
  2. 遍历arr,取出待入栈元素current;
  3. 定义已经出栈的元素集合peekList;
  4. 倒序遍历,栈顶元素先出栈peek;
    • 出栈元素依次相加,得到sum;
    • 出栈元素之和大于当前待入栈元素,则没必要再比下去了,直接加入当前待入栈元素current;
    • 出栈元素之和等于当前待入栈元素,则将已经比较过的栈内元素取出;
      • 重新入栈新元素 m(m=2*n1);
    • 如果不等,已经出栈的元素集合加入peek;
  5. 比较不等,则加入待入栈元素;
  6. 得到最终的list,倒序输出。

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < arr.length; i++) {
        // 待入栈元素
        int current = arr[i];
        if (list.size() == 0) {
            list.add(current);
            continue;
        }

        // 1 2 5 7 9 1 2 2
        int sum = 0;
        // 已经出栈的元素集合
        List<Integer> peekList = new ArrayList<>();
        boolean flag = false;
        // 倒序遍历,栈顶元素先出栈
        for (int j = list.size() - 1; j >= 0; j--) {
            int peek = list.get(j);
            // 出栈元素依次相加
            sum += peek;
            // 出栈元素之和大于当前待入栈元素,则没必要再比下去了
            if (sum > current) {
                list.add(current);
                flag = true;
                break;
            }

            // 出栈元素之和等于当前待入栈元素,则将已经比较过的栈内元素取出
            if (sum == current) {
                peekList.add(peek);
                for (int k = 0; k < peekList.size(); k++) {
                    list.remove(list.size() - 1);
                }
                // 重新入栈新元素 m(m=2*n1)
                list.add(2 * current);
                flag = true;
                break;
            } else {
                // 已经出栈的元素集合
                peekList.add(peek);
            }
        }

        // 比较不等,则加入待入栈元素
        if (!flag) {
            list.add(current);
        }
    }

    // 倒序输出
    StringJoiner stringJoiner = new StringJoiner(" ");
    for (int i = list.size() - 1; i >= 0; i--) {
        stringJoiner.add(list.get(i) + "");
    }
    System.out.println(stringJoiner);
}

六、效果展示

1、输入

1 2 5 7 9 1 2 2

2、输出

4 1 9 14 1

3、说明

  1. 1 2 5入栈
  2. 7再入栈 7 = 2 + 5 , 7 2 5 出栈,栈内元素1
  3. 2 * 7 入栈,栈内元素1 14
  4. 9 1 2入栈,栈内元素1 14 9 1 2
  5. 2入栈 2 = 2,2 2 出栈,栈内元素1 14 9 1
  6. 2 * 2 入栈,栈内元素1 14 9 1 4
  7. 倒序输出4 1 9 14 1

在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何零样本实现语义分割

CLIPTeacher&#xff1a;一种基于VLM的通用零样本语义分割框架&#xff0c;有效地利用了可见和忽略区域&#xff0c;而不需要对原CLIP模型进行任何更改&#xff0c;性能提升显著&#xff01;单位&#xff1a;名古屋大学 现有的通用零样本语义分割&#xff08;GZLSS&#xff09…

校园快递派送互助系统 微信小程序设计与实现

本毕业设计的内容是设计实现一个基于Springboot微信小程序的快递校园帮。使用微信开发者是以java语言进行开发&#xff0c;MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。快递校园帮的功能已基本实现&#xff0c;主要包括有用户、快递员、快递公司、快递…

使用Panda-Gym的机器臂模拟进行Deep Q-learning强化学习

强化学习(RL)是一种机器学习方法&#xff0c;它允许代理通过试错来学习如何在环境中表现。行为主体因采取行动导致预期结果而获得奖励&#xff0c;因采取行动导致预期结果而受到惩罚。随着时间的推移&#xff0c;代理学会采取行动&#xff0c;使其预期回报最大化。 RL代理通常使…

Kubernetes概念及实践

Kubernetes(K8S)中文文档_Kubernetes中文社区 Kubernetes 文档 | Kubernetes K8S 是负责自动化运维管理多个跨机器 Docker 程序的 集群。 kubeadm快速部署K8s集群的工具&#xff0c;如&#xff1a; 创建master node&#xff1a;kubeadm init 将worker node加入到集群中&#x…

Qt 重写QSlider简单实现滑动解锁控件(指定百分比回弹效果)

组件效果图: 应用场景: 用于滑动解锁相关场景,Qt的控件鼠标监听机制对于嵌入式设备GUI可触摸屏依旧可用。 实现方式: 主要是通过继承QSlider以及搭配使用QStyleOptionSlider来实现效果。 注意细则: QStyleOptionSlider是用于定制空白区域是否可移动滑块,根据需求可…

MySQL 到 TiDB:vivo 的 Hive Metastore 横向扩展之路

以下文章来源于公众号 vivo 互联网技术 &#xff0c;作者 Wang Zhiwen 导读 本文介绍了 vivo 在大数据元数据服务横向扩展道路上的探索历程&#xff0c;由实际面临的问题出发&#xff0c;对当前主流的横向扩展方案进行了调研及对比测试&#xff0c;通过多方面对比数据择优选择…

10_4阻塞和非阻塞跟poll和等待队列

阻塞和非阻塞 广泛上的区别就是 应用程序如果非阻塞那读取不到数据就应该马上有返回值 阻塞的话就是在应用程序去read数据,但是设备驱动没有数据,就一直卡住,直到有数据再继续往下 补充阻塞知识,应用层大部分都是阻塞 如果要非阻塞 ,应用程序在打开设备节点的时候填写int fd …

文件夹比较工具怎么用 对比两个文件夹找出多余的文件

在日常工作中&#xff0c;经常会接触到大量的文件&#xff0c;长时间堆积&#xff0c;文件夹会越来越多&#xff0c;从而导致文件重复&#xff0c;如果想要找出想要的文件会比较麻烦&#xff0c;那么你知道应该怎么来查找吗&#xff1f;下面就让我们来学习一下文件夹比较工具怎…

【LeetCode刷题-哈希】-- 705.设计哈希集合

705.设计哈希集合 方法&#xff1a;使用链地址法 设哈希表的大小为base&#xff0c;可以设计一个简单的哈希函数&#xff1a;hash(x) x mod base 开辟一个大小为base的数组&#xff0c;数组的每个位置是一个链表&#xff0c;当计算出哈希值后&#xff0c;就插入到对应位置的…

华为OD机试 - 计算疫情扩散时间 - 矩阵(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

在CentOS上用yum方式安装MySQL8真实全过程记录(顺利版本)

此文参考我前面的文章《在CentOS上用yum方式安装MySQL8过程记录》&#xff0c;之前比较曲折&#xff0c;现在再安装一台mysql。 因为之前很多坑已经走过&#xff0c;加上这台Linux之前没安装过MYSQL&#xff0c;所以整个过程算是非常顺利。 安装环境&#xff1a;centos7 mysql…

【c++|opencv】一、基础操作---1.图像读取

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 有关c操作opencv记录 1. 正文 1.1 图像读取、显示、保存 // 读取、显示、保存图像#include <opencv2/opencv.hpp> #include <iostream>us…

开发语言工具编程系统化教程入门和初级专辑课程上线

开发语言工具编程系统化教程入门和初级专辑课程上线 学习编程捷径&#xff1a;&#xff08;不论是正在学习编程的大学生&#xff0c;还是IT人士或者是编程爱好者&#xff0c;在学习编程的过程中用正确的学习方法 可以达到事半功倍的效果。对于初学者&#xff0c;可以通过下面…

20M香港服务器性能测试和租用价格,这价格不亏吗?

腾讯云香港轻量应用服务器优惠价格24元一个月&#xff0c;一年288元&#xff0c;以前是30M峰值带宽&#xff0c;现在是20M峰值带宽&#xff0c;阿腾云atengyun.com分享腾讯云香港轻量应用服务器性能测评&#xff0c;包括香港轻量服务器配置价格表、CPU性能和CN2网络延迟测试&am…

IntelliJ IDEA快捷键sout不生效

1.刚下载完idea编辑器时&#xff0c;可能idea里的快捷键打印不生效。这时你打开settings 2.点击settings–>Live Templates–>找到Java这个选项&#xff0c;点击展开 3.找到sout 4.点击全选&#xff0c;保存退出就可以了 5.最后大功告成&#xff01;

​学习一下,什么是预包装食品?​

预包装食品&#xff0c;指预先定量包装或者制作在包装材料和容器中的食品&#xff1b;包括预先定量包装以及预先定量制作在包装材质和容器中并且在一定量限范围内具有统一的质量或体积标识的食品。简单说&#xff0c; 就是指在包装完成后即具有确定的量值&#xff0c;这一确定的…

游戏界面设计:打造吸引人的视觉体验

如何进行游戏界面设计&#xff1f;游戏UI界面设计的前景如何&#xff1f;我相信这是许多UI设计师和想要转向UI设计的设计师非常关心的问题。今天&#xff0c;小将和你谈谈。 首先&#xff0c;游戏界面设计师的前景仍然很好。游戏用户界面是一门研究人机交互的学科&#xff0c;…

【设计模式】第19节:行为型模式之“中介模式”

一、简介 中介模式定义了一个单独的&#xff08;中介&#xff09;对象&#xff0c;来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象交互&#xff0c;来避免对象之间的直接交互。 中介模式的设计思想跟中间层很像&#xff0c;通过引入中介这个中间层&#xf…

分享个自己写的小程序解包工具

闲聊 前几天在吾爱破解上看到一个小程序逆向的帖子&#xff1a;windows下通杀wx小程序云函数实战 &#xff0c;想着自己也学习一下怎么逆向小程序&#xff0c;一搜 unveilr 仓库没了&#xff0c;看评论好像开始收费了。 我就用aardio写了一个解密和解包工具&#xff0c;这里免…

亚马逊、ebay卖家必读!买家账号关联问题和解决应对方案。

跨境电商卖家最害怕发生的事情之一&#xff0c;就是账号关联了。在多数卖家印象中&#xff0c;平台是不允许一个卖家同时进行多账号操作&#xff0c;一旦被发现就会被强制关停。其实并非如此&#xff0c;平台是允许将不同的亚马逊卖家账号链接在一起&#xff0c;使它们形成一个…