每日股票价格 - 华为机试真题题解

每日股票价格 - 华为机试真题题解

alt

题目描述

​ 给定某只股票连续N天的价格列表stockPrices,其中stockPricesi表示股票某天的价格,请生成一个新列表,对应位置输出为:要想等到股票价格上涨,至少需要等待的天数,如果股票价格不上涨,对应位置输出为0。

输入

第一行 表示第二行元素的个数N

第二行为用空格隔开的整数,表示每天股票的价格

其中0<N<=1000000每天股票价格为正整数

输出

输出为用空格分隔的长度为N的列表,对应位置为:要想等到股票价格上涨至少需要等待的天数

示例1

输入:
5
33 34 14 12 16
输出:
1 0 2 1 0
解释: 
stockPrices =[33,34,14,12,16]
当i=0时,stockPrices[0]=33,下次价格上涨stockPrices[1]=34,此处输出为1-0=1
当i=1时,stockPrices[1]=34,后续股票价格没有上涨,此处输出0
当i=2时,stockPrices[2]=14,下次价格上涨stockPrices[4]=16,此处输出为 4-2=2
当i=3时,stockPrices[3]=12下次价格上涨stockPrices[4]=16,此处输出为 4-3=1
当i=4时,stockPrices[3]=16,后续股票价格没有上涨,此处输出0所以输出为1 0 2 1 0

示例2

输入:
5
12 13 14 15 16
输出:
1 1 1 1 0

Java 题解

单调栈问题,

关键点:

  1. 不使用 FastScanner 快读只能通过 40 %;
  2. 不适用快速输出只能通过 90 %;
import java.io.*;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
        FastScanner cin = new FastScanner(System.in);//快读
        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));//快速输出
        int n = cin.nextInt();

        int[] a = new int[n];
        LinkedList<int[]> stack = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            int price = cin.nextInt();
            while (!stack.isEmpty() && stack.peek()[1] < price) {
                int idx = stack.poll()[0];
                a[idx] = i - idx;
            }

            stack.push(new int[]{i, price});
        }

        for (int i = 0; i < n; i++) {
            out.print(a[i] + " ");
        }
        out.flush();
    }
}

class FastScanner {
    BufferedReader br;
    StringTokenizer st;

    public FastScanner(InputStream in) {
        br = new BufferedReader(new InputStreamReader(in), 16384);
        eat("");
    }

    public void eat(String s) {
        st = new StringTokenizer(s);
    }

    // 读一行
    public String nextLine() {
        try {
            return br.readLine();
        } catch (IOException e) {
            return null;
        }
    }

    public boolean hasNext() {
        while (!st.hasMoreTokens()) {
            String s = nextLine();
            if (s == null) return false;
            eat(s);
        }
        return true;
    }

    // 读取下一个元素
    public String next() {
        hasNext();
        return st.nextToken();
    }

    // 读int
    public int nextInt() {
        return Integer.parseInt(next());
    }
}

Python 题解

n = int(input())
prices = list(map(int, input().split()))

#max_stack 大顶栈
max_stack, ans = [], [0] * n
for idx, price in enumerate(prices):
    while max_stack and price > max_stack[-1]:
        last = max_stack.pop()
        ans[last] = idx - last
    max_stack.append(idx)

# *ans 将列表中的元素作为参数传递给 print 函数,并用空格分隔它们。
print(*ans)

C++ 题解

#include <iostream>
#include <vector>
#include <stack>

int main() {
    int n;
    std::cin >> n;

    std::vector<int> prices(n);
    for (int i = 0; i < n; ++i) {
        std::cin >> prices[i];
    }

    std::stack<int> max_stack;
    std::vector<int> ans(n, 0);

    for (int idx = 0; idx < n; ++idx) {
        int price = prices[idx];
        while (!max_stack.empty() && price > prices[max_stack.top()]) {
            int last = max_stack.top();
            max_stack.pop();
            ans[last] = idx - last;
        }
        max_stack.push(idx);
    }

    for (int i = 0; i < n; ++i) {
        std::cout << ans[i] << " ";
    }

    return 0;
}

(单调栈)相关练习题

alt

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redlock算法实现Redis分布式锁

Redlock算法实现Redis分布式锁 为什么基于故障转移的实现还不够 使用 Redis 锁定资源的最简单方法是在实例中创建密钥。密钥通常是在有限的生存时间内创建的&#xff0c;使用 Redis 过期功能&#xff0c;以便最终它被释放&#xff08;我们列表中的属性 2&#xff09;。当客户…

漫步者开放式耳机怎么样?南卡、漫步者开放式耳机哪个好?

现在开放式耳机的市场越来越混杂&#xff0c;我们作为消费者在挑选的时候&#xff0c;一定要找准需求点才能把踩坑几率降到最低。实在不会挑选的也不要紧&#xff0c;我最近入了2款目前市面最畅销的百元款开放式耳机&#xff1a;南卡OE CC和漫步者comfo fit&#xff0c;亲身上耳…

深入理解MVCC与BufferPool缓存机制

http://note.youdao.com/noteshare?idb36b975188fadf7bfbfd75c0d2d6b834&sub5A7459FE4B464EC896F9DD9A4 E MySQL在读已提交和可重复度隔离级别下都实现了MVCC机制 begin/start transaction 命令并不是一个事务的起点&#xff0c;在执行到它们之后的第一个修改操作InnoDB…

ubuntu windows 文件格式^M 问题

dos2unix是将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的换行符为rn ,而Unix&Linux文件的换行符为n。 dos2unix命令其实就是将文件中的rn 转换为n。 而unix2dos则是和dos2unix互为孪生的一个命令&#xff0c;它是将Linux&Unix格式文件转换为Wi…

【Linux】telnet命令使用

telnet命令 telnet命令用于使用telnet协议与另一台主机进行通信。如果在没有主机参数的情况下调用telnet&#xff0c;它将进入命令模式&#xff0c;由其提示&#xff08;telnet>&#xff09;指示。在这种模式下&#xff0c;它接受并执行下面列出的命令。如果使用参数调用它…

二叉树的链式结构

1.二叉树的构建 想要对二叉树进行操作&#xff0c;我们得先构建一个二叉树 因此&#xff0c;这里的问题就是给定数据&#xff0c;如何将数据在逻辑结构上变成二叉树&#xff1f; 结构定义&#xff1a; typedef int BTDataType;typedef struct BinaryTreeNode {BTDataType v…

【go语言开发】go项目打包成Docker镜像,包括Dockerfile命令介绍、goctl工具生成

本文主要介绍如何将go项目打包成镜像&#xff0c;首先介绍Dockerfile常用命令介绍&#xff0c;然后介绍使用工具goctl用于生成Dockerfile&#xff0c;还可以根据需求自定义指令内容&#xff0c;最后讲解如何将go-blog项目打包成镜像&#xff0c;以及如何运行等 文章目录 前言Do…

助力乡村振兴:VR全景技术能在乡村发展哪些方面提供帮助

引言&#xff1a; VR全景技术是具有巨大潜力的创新技术&#xff0c;它能够为乡村振兴带来许多机会。通过创建沉浸式的虚拟现实环境&#xff0c;VR全景技术在乡村旅游、农业、教育和文化推广等方面都能发挥重要作用。 一、乡村旅游 1.提升乡村景区宣传效果 通过使用VR全景技术…

IDEA 2023版本解决Error running Command line is too long. Shorten the command line

报错信息 Error running XXXApplication. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun. 解决方法 1.右键服务 选择Edit Configuration 2. 点击 Modify options 3. 勾选Shorten commnand line 4. 修改并保存

Java 实现 图片 添加 文字水印、图片水印 工具类

一、话不多说&#xff0c;直接上代码 1.1&#xff0c;水印类型枚举 import lombok.AllArgsConstructor; import lombok.Getter;/*** author: wangjing* createTime: 2023-12-05 15:01* version: 1.0.0* Description: 水印类型枚举*/ Getter AllArgsConstructor SuppressWarni…

已解决error: (-215:Assertion failed) inv_scale_x > 0 in function ‘cv::resize‘

需求背景 欲使用opencv的resize函数将图像沿着纵轴放大一倍&#xff0c;即原来的图像大小为(384, 512), 现在需要将图像放大为(768, 512)。 源码 import cv2 import numpy as np# 生成初始图像 img np.zeros((384, 512), dtypenp.uint8) img[172:212, 32:-32] 255 H, W …

天池SQL训练营(二)-SQL基础查询与排序

-天池龙珠计划SQL训练营 Task02&#xff1a;SQL基础查询与排序 SQL训练营页面地址&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicampsql 一、SELECT语句基础 1.1 从表中选取数据 SELECT语句 从表中选取数据时需要使用SELECT语句&#xff0c;也就是只从表…

机器学习---线性回归算法

1、什么是回归&#xff1f; 从大量的函数结果和自变量反推回函数表达式的过程就是回归。线性回归是利用数理统计中回归分析来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 2、一元线性回归 3、多元线性回归 如果回归分析中包括两个或两个以上的自变量&a…

基于springboot校园二手平台的开发与设计

目 录 1 绪论 1 1.1 课题研究背景 1 1.2 研究意义 1 1.3 研究的目标 2 2 系统技术选型 3 2.1 数据库选择 3 2.2 开发工具的选择 3 2.3 后端框架选择 3 2.4 前端框架选择 3 3 系统需求和可行性分析 4 3.1 总体设计原则 4 3.2 需求分析 4 3.3 可行性分析 5 3.3.1 技术可行性 5 3…

我想修改vCenter IP地址

部署vCenter Server Appliance后&#xff0c;您可以在vCenter修改DNS设置并选择域名服务器使用。您可以编辑vCenter Server Appliance的IP地址设置。从vSphere 6.5开始正式支持vCenter修改IP地址。因此可以更改vCenter Server Appliance的IP地址和DNS设置。 注意&#xff1a;更…

shein、亚马逊卖家测评如何利用自养买家号提升购买转化率?

自养买家号测评的作用&#xff0c;对于众多卖家来说&#xff0c;恐怕并不陌生。它可以快速注入评论&#xff0c;提升排名&#xff0c;创建热卖商品的一种催化剂。在当前电子商务行业蓬勃发展的背景下&#xff0c;买家号的重要性越来越凸显。 买家会花时间浏览店铺的评价&#…

Unity随笔1 - 安卓打包JDK not found

今天遇到一个很奇怪的事情&#xff0c;之前可以正常打安卓包&#xff0c;但是突然报错如下&#xff1a; 提示很明显&#xff0c;找不到JDK了。可是我在下载Unity的时候明明安装了所有需要的组件&#xff0c;为什么今天突然不行。 看了眼Unity hub里面&#xff0c;没问题。 那就…

一文了解直流稳压电源调试方法

直流稳压电源是是一种将交流或直流电源转换为稳定直流电压的电子装置&#xff0c;被广泛应用于国防、科研、医疗、通讯、工业自动化设备等领域。 直流稳压电源一般由变压器、整流电路、滤波电路和稳压电路组成。变压器会将交流电源转换为所需的电源电压&#xff0c;整流电路将交…

Leetcode—383.赎金信【简单】

2023每日刷题&#xff08;五十&#xff09; Leetcode—383.赎金信 实现代码 class Solution { public:int arr[26] {0};int arr2[26] {0};bool canConstruct(string ransomNote, string magazine) {int len ransomNote.size();int len2 magazine.size();for(int i 0; i …

csv文件中账号数字显示为科学计数法1.23E+16

参见&#xff1a; 如何解决导出csv文件数字自动变为科学计数法&#xff08;数值中带E&#xff09;_csv格式数字老是变成什么e-CSDN博客 其中&#xff0c;在倒数第2张图 里 选“新工作表”。