(刷题笔记) 牛客网 腾讯2020校园招聘-后台 2.逛街

(刷题笔记) 牛客网 腾讯2020校园招聘-后台 1.压缩算法 目录题目解题思路代码(C++) 题目 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M 小Q想要给他的朋友发送一个神秘字符串,但是他发现字符串的过于长了,于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩,对于字符串中连续的m个相同字符串S将会压缩为[m|S] (m为一个整数且1<=m<=100),例如字符串ABCABCABC将会被压缩为[3|ABC],现在小Q的同学收到了小Q发送过来的字符串,你能帮助他进行解压缩么? 输入描述: 输入第一行包含一 阅读详情

题目

小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。
小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住)

输入描述:

输入第一行将包含一个数字n,代表楼的栋数,接下来的一行将包含n个数字wi(1<=i<=n),代表每一栋楼的高度。
1<=n<=100000;
1<=wi<=100000;

输出描述:

输出一行,包含空格分割的n个数字vi,分别代表小Q在第i栋楼时能看到的楼的数量。

示例1
输入

6
5 3 8 3 2 5

输出

3 3 5 4 4 4

说明

当小Q处于位置3时,他可以向前看到位置2,1处的楼,向后看到位置4,6处的楼,加上第3栋楼,共可看到5栋楼。当小Q处于位置4时,他可以向前看到位置3处的楼,向后看到位置5,6处的楼,加上第4栋楼,共可看到4栋楼。

链接:https://www.nowcoder.com/questionTerminal/35fac8d69f314e958a150c141894ef6a
来源:牛客网

解题思路

这道题就是昨天说的两个小时只写了两道题,其中一道只通过了一半测试用例的那道。

这里也附上只通过了一半的解法,没有特别要说明的,就是O(N*N)暴力破解,每查找一个位置都要遍历一遍数组,这大概就是会超时的原因。

其中的细节大概就是按情境将数组分成两部分处理,并由此写了两个函数,一个叫向前看(forward),另外一个叫向后看(backward),两个函数的处理内容是一样的。
也就是用temp维护一个临时最大值,如果后续遍历中遇到比temp更大的就更新temp,并将结果++。(这么一想这题果然是单调栈的典型应用呀,只是没有整理过单调栈的用法所以想不到)

然后就是单调栈的解法,解完所有的位置只需要遍历两次数组。

  • 思路也是分成两步,第一步是向前看能看到多少楼,第二步是向后看能看到多少楼,最后加上自己就是所有能看到的楼。
    • 向前(左)能看到多少楼,也就是遍历到自己时前面有几个单调递减数,所以是正着遍历。
    • 向后(右)能看到多少楼,也就是遍历到自己时后面有多少单调递增数,正向遍历的时候没办法知道自己后面的情况,所以就用反向遍历,因为反向了,所以维护的栈也相应变成单调递减了。

代码(C++)

暴力版(只能通过一半测试用例)

#include<iostream>
#include<vector>
 
using namespace std;
 
int forward(vector<int>& wi,int i){
     
    int res=0;
    int temp=0;
    if(i==0) return 0;
    else{
        for(int cnt=i-1;cnt>=0;--cnt){
            if(wi[cnt]>temp){
                res++;
                temp=wi[cnt];
            }
            
        }
     
    }
     return res;
}
 
int backward(vector<int>& wi,int i){
    int res=0;
    int temp=0;
    if(i==wi.size()) return 0;
    else{
        for(int cnt=i+1;cnt<wi.size();++cnt){
            if(wi[cnt]>temp){
                res++;
                temp=wi[cnt];
            }
        }
    }
    return res;
}
 
int main(){
     
    vector<int> wi;
    int n=0;
    int temp=0;
    cin>>n;
    for(int i=0;i<n;++i){
        cin>>temp;
        wi.push_back(temp);
    }
     
    vector<int> ans;
    for(int i=0;i<wi.size();++i){
         
        int v=forward(wi,i)+backward(wi,i);
        ans.push_back(v+1);
    }
     
    for(int i=0;i<ans.size();++i){
        cout<<ans[i]<<' ';
         
    }
    cout<<endl;
     
    return 0;
     
}

单调栈

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

using namespace std;

int main(){
    
    int n=0;
    cin>>n;
    vector<int> vec(n);
    
    for(int i=0;i<n;++i){
        cin>>vec[i];
    }
    
    stack<int> forward;
    stack<int> backward;
    vector<int> f_ans(n);
    vector<int> b_ans(n);
    
    for(int i=0;i<n;++i){
        
        f_ans[i]=forward.size();
        while(!forward.empty()&&vec[i]>=forward.top()) forward.pop();
        forward.push(vec[i]);
        
    }
    
    for(int i=n-1;i>=0;--i){
        
        b_ans[i]=backward.size();
        while(!backward.empty()&&vec[i]>=backward.top()) backward.pop();
        backward.push(vec[i]);
        
    }
    
    for(int i=0;i<n;++i){
        cout<<f_ans[i]+b_ans[i]+1<<" ";
    }
    
    return 0;
}
(刷题笔记) Leetcode 198. 打家劫舍 目录题目解题思路代码(C++) 题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 阅读详情

相关推荐

腾讯2020校园招聘----逛街

腾讯2020校园招聘----逛街 文章目录腾讯2020校园招聘----逛街一、问题描述二、问题分析 一、问题描述 小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。 小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住) 输入描述: 输入第一行将包...

wolfGuiDao的博客 994

腾讯2020校园招聘-后台[编程题]逛街

一、题目 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M 小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。 小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住) 输入例子1: [5,3,8,3,2,5] 输出例子1: [3,3,5,4,4,4] 例子说明1: 当小Q处于位置3时,他可以向前看到位置2,1

weixin_45794299的博客 473

别再只用三次多项式了!用MATLAB手把手教你搞定七次多项式轨迹规划(附完整代码)

本文详细介绍了七次多项式在轨迹规划中的优势与应用,通过MATLAB实现从理论推导到实际代码的全过程。相比传统的三次多项式,七次多项式能精确控制位置、速度、加速度和加加速度,实现更平滑的运动控制,特别适用于工业机器人和数控机床等高精度场景。文章包含完整的MATLAB代码示例和优化技巧,帮助工程师快速掌握这一高级轨迹规划方法。

weixin_30872337的博客 298

腾讯后台笔试题逛街

逛街 链接:https://www.nowcoder.com/questionTerminal/35fac8d69f314e958a150c141894ef6a 来源:牛客网 小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。 小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于...

VICTORY963的博客 620

华为防火墙USG6000系列多ISP上网(通过WEB界面设置)

华为防火墙多ISP上网,内网分区上网。内网多网段不同上网方式。

daxihe880的博客 1万+

ADS SerDes仿真实战:深入解析Tx_Diff均衡器(EQ)参数对眼图质量的影响

本文以ADS仿真平台为基础,深入解析了SerDes设计中Tx_Diff均衡器(EQ)参数对信号完整性的核心影响。通过实战演示,详细对比了去加重(De-emphasis)与FIR抽头系数两种调节模式,揭示了它们如何有效对抗信道损耗与码间干扰,从而显著改善眼图的高度、宽度与抖动性能,为高速串行链路设计提供关键调优思路。

weixin_29230901的博客 226

逛街【 腾讯2020校园招聘-后台&综合-第一次笔试】(单调栈的应用)

题目描述: 小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。 小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住) 输入描述: 输入第一行将包含一个数字n,代表楼的栋数,接下来的一行将包含n个数字wi(1<...

Twinkle_sone的博客 1219

kaggle项目:纽约出租车行程时间NYC Taxi Trip Duration

纽约出租车形成时间预测(NYC Taxi Trip Duration)是Kaggle中的一个Playground竞赛。比赛数据集基于2016年纽约市黄色出租车行程记录数据,需要建立一个模型,根据单个行程属性,预测测试集中每次行程的持续时间。Kaggle项目模型XGBoost,评价指标RMSLE。

weixin_42113929的博客 2790

牛客网:2020腾讯后台:逛街

牛客网 后台 单调栈

weixin_46266058的博客 424

PyTorch深度学习实战(2)——PyTorch基础

PyTorch 是广泛应用于机器学习领域中的强大开源框架,因其易用性和高效性备受青睐。在本节中,将介绍使用 PyTorch 构建神经网络的基础知识。首先了解 PyTorch 的核心数据类型——张量对象。然后,我们将深入研究用于张量对象的各种操作。PyTorch 提供了许多帮助构建神经网络的高级方法及组件,并提供了利用 GPU 更快地训练神经网络的张量对象。

盼小辉丶的博客 5万+

国产麒麟V10系统命令大全,100个实用命令助你玩转系统!

国产麒麟V10系统命令大全,100个实用命令助你玩转系统!

网络技术联盟站 1910

[刷题] 腾讯2020校招后端-第一批 第2题 逛街

问题: 小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。 小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住) 输入: 输入第一行将包含一个数字n,代表楼的栋数,接下来的一行将包含n个数字wi(1<=i<=n),代...

家玮老师的博客 721

uniapp | 基于高德地图实现位置选择功能(安卓端)

在uni-app项目中实现地图位置选择功能的解决方案。由于uni.chooseLocation功能受限,采用高德地图API自主开发。系统由父组件poiMap.vue(负责展示和跳转)和子组件poiBox.vue(核心地图逻辑)构成,通过父子组件通信传递位置数据。关键技术包括:1)使用AMapLoader动态加载地图SDK;2)集成PositionPicker实现拖拽选点;3)异步加载AMapUI插件;4)通过事件监听获取位置详情(地址/经纬度)。

大胆尝试,小心实践 733

【牛客网】腾讯2020校园招聘笔试题

1-压缩算法 思路 从内向外替换, right代表从左侧开始第一个开始的’]‘位置, left代表与当前’]‘对应的’[‘位置, k记录’|‘位置 在遍历时,将’[‘和’|‘的位置分布入栈,当读到’]'时弹出 参考自该博客 代码 #include<iostream> #include<string> #include<stack> using namespace std; /* 思路: 从内向外替换, right代表从左侧开始第一个开始的']'位置, left代表与当前'

Do Better 1044

1小时读完100篇文献的正确打开方式

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。文献阅读与整理一般都是最先开始、却也最容易被低估的一步。很多学术同仁一开始就陷入越读越多、越读越乱的状态:论文下载了一大堆,但真正能用来支撑自己观点的内容却始终难以提炼出来。一方面,我们需要通过文献了解该研究领域的整体发展脉络,把握当前学界已经讨论到什么程度;

智能AI让学术科研更容易 49

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

牛客刷题日记1——腾讯2020(2逛街)

牛客刷题日记1——腾讯2020(2逛街) 题目描述: 小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。 小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住) 输入描述: 输入第一行将包含一个数字n,代表楼的栋数,接下来的一行将包含n个数字...

Ambition360的博客 813

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

(刷题笔记) 牛客网 腾讯2020校园招聘-后台 3.逆序对

目录题目解题思路代码(C++) 题目 复制过来会乱码,题目是截图截过来的,可能会不清楚,可以通过下面的连接去看题目 链接:https://www.nowcoder.com/questionTerminal/8fe007e54fc04b5e82089aaa71ba3553 来源:牛客网 解题思路 这道题我一开始只会用暴力法写,也就是按照题目意思翻转一次计算一次逆序对,时间复杂度O(MNN),M是翻转次数,N是数据规模,只能通过50%的测试用例。 然后看了一下解答区的答案,需要用到归并排序的思想,我不懂,然

github_38683027的博客 684

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Python——腾讯在线编程题(2018)

题目描述: 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。 如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7)) [2,3,5,7] 输入描述:输入包括一个整数n,(3 ≤ n < 1000) 输出描述:输出对数 示例1 : 输入: 10 输出: 2 代码块: num = int(inpu...

weixin_42566251的博客 412

刷题笔记:牛客腾讯笔试题——有趣的数字

题目 小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢? 输入描述: 输入包含多组测试数据。 对于每组测试数据: N - 本组测试数据有n个数 a1,a2...an - 需要计算的数据 保证: 1&amp;lt;=N&amp;lt;=100000,0&amp;lt;=ai&amp;lt;=INT_MAX. 输出描述: 对于每组数据,输出两个数,第一个数表示差最小的对数...

慢慢积累 1535

7道腾讯算法编程真题,你能做对几道?包含一道趣味题

       1、生成格雷码        在一组数字的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(GrayCode),请编写一个函数,使用递归的方法生成N位的格雷码。给定一个整数n,请返回n位的格雷码,顺序从0开始。 importjava.util.Scanner; publicclassMain{ publicstaticvoidm

北京麟卓 7993

腾讯2020校招笔试题 逛街 JAVA题解

逛街 小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。 小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住) 输入描述: 输入第一行将包含一个数字n,代表楼的栋数,接下来的一行将包含n个数字wi(1<=i<=n),代表每一...

weixin_41988889的博客 1212

腾讯校园招聘笔试——逛街能看到楼的数量

小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。 小Q从第一栋一直走到了最后一栋,小Q从来没有看到过这么多高楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住) 输入描述: 输入第一行将包含一个数字n,表示楼的栋数,接下来的一行将包含n个数字wi(1<=i<=n),代表一栋楼的高度。 1&...

qq_37724465的博客 2103

(刷题笔记) Leetcode 面试题 08.10. 颜色填充

目录题目解题思路代码(C++) 题目 编写函数,实现许多图片编辑软件都支持的「颜色填充」功能。 待填充的图像用二维数组 image 表示,元素为初始颜色值。初始坐标点的横坐标为 sr 纵坐标为 sc。需要填充的新颜色为 newColor 。 「周围区域」是指颜色相同且在上、下、左、右四个方向上存在相连情况的若干元素。 请用新颜色填充初始坐标点的周围区域,并返回填充后的图像。 示例: 输入: image = [[1,1,1],[1,1,0],[1,0,1]] sr = 1, sc = 1, newC

github_38683027的博客 568

(刷题笔记)Leetcode 530.二叉搜索树的最小绝对差

目录题目解题思路代码(C++) 题目 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例: 输入: 1 \ 3 / 2 输出: 1 解释: 最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。 提示: 树中至少有 2 个节点。 本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/ 相同 来源:力扣(LeetCode) 链接:https:

github_38683027的博客 484

(刷题笔记) Leetcode 279. 完全平方数

目录题目解题思路代码(C++) 题目 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/perfect-squares 解题思路 写了这么多道广度优先搜索和动

github_38683027的博客 461
上一篇: (刷题笔记) Leetcode 503. 下一个更大元素 II
下一篇: (刷题笔记) Leetcode 912. 排序数组
Lucky&Happy
博客等级 码龄10年 1粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值