首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
Offer小猫🐱
中国矿业大学(北京) 产品经理
发布于北京
关注
已关注
取消关注
@林小白zii:
快手笔试 快手笔试题 0508
笔试时间:2024年05月08日 历史笔试传送门:2023秋招笔试合集 第一题 题目 给定一个长度为n的整数数组,大小为k的滑动窗口从数组的最左侧移动到数组的最右侧,滑动窗口每次只向右移动一位。请使用一次数组遍历,输出每个滑动窗口中的最大值。 输入描述 第一行为,正整数n和正整数k,k<=n;第二行为,n个整数。 输出描述 每个滑动窗口的最大值依次输出,空格分隔。 样例输入一 100 80 209 928 234 9 390 809 34 458 826 851 929 954 228 508 87 839 756 900 461 696 916 880 293 501 770 339 188 592 75 126 245 509 526 235 634 440 246 277 579 687 595 914 873 130 335 811 818 718 78 540 367 330 742 973 29 250 834 656 725 686 451 249 683 895 172 790 180 378 715 436 522 178 370 521 698 662 167 606 198 635 27 538 840 670 829 735 932 621 910 700 348 857 319 556 591 384 942 947 523 14 样例输出一 973 973 973 973 973 973 973 973 973 973 973 973 973 973 973 973 973 973 973 973 973 样例输入二 100 10 534 560 153 216 972 259 908 429 809 353 735 463 898 750 814 420 337 296 71 518 795 377 407 964 407 895 747 242 170 929 779 607 281 305 168 105 22 153 742 62 617 157 199 201 573 223 918 462 972 889 644 132 970 227 888 388 499 975 752 927 382 445 861 883 133 738 467 987 145 480 95 698 735 605 395 684 389 450 211 331 306 14 428 507 423 934 505 186 526 238 289 175 307 158 157 718 468 858 949 986 样例输出二 972 972 972 972 972 908 908 898 898 898 898 898 898 814 964 964 964 964 964 964 964 964 964 964 929 929 929 929 929 929 779 742 742 742 742 742 742 918 918 972 972 972 972 972 972 972 972 972 975 975 975 975 975 975 975 975 975 975 987 987 987 987 987 987 987 987 987 987 735 735 735 735 735 684 684 684 934 934 934 934 934 934 934 934 934 934 718 718 858 949 986 参考题解 Leetcode原题,使用了单调队列(双端队列)来解决这个问题,这段代码使用了单调队列(双端队列)来解决滑动窗口的最大值问题。时间复杂度为O(n),只需要一次数组遍历。 C++:[此代码未进行大量数据的测试,仅供参考] #include <iostream>#include <vector>#include <deque>using namespace std;vector<int> maxSlidingWindow(vector<int>& nums, int k) { if (nums.empty() || k <= 0) { return {}; } int n = nums.size(); vector<int> result; deque<int> deque; for (int i = 0; i < n; i++) { // 保持窗口大小不超过k while (!deque.empty() && deque.front() < i - k + 1) { deque.pop_front(); } // 删除队列中小于当前元素的值 while (!deque.empty() && nums[deque.back()] < nums[i]) { deque.pop_back(); } // 将当前元素加入队列尾部 deque.push_back(i); // 记录窗口中的最大值 if (i >= k - 1) { result.push_back(nums[deque.front()]); } } return result;}int main() { int n, k; cin >> n >> k; vector<int> nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } vector<int> result = maxSlidingWindow(nums, k); for (int i = 0; i < result.size(); i++) { cout << result[i]; if (i < result.size() - 1) { cout << " "; } } return 0;} Java:[此代码未进行大量数据的测试,仅供参考] import java.util.*;public class SlidingWindowMax { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 读取数组长度n和滑动窗口大小k int n = scanner.nextInt(); int k = scanner.nextInt(); // 读取整数数组 int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = scanner.nextInt(); } // 输出滑动窗口的最大值 int[] result = maxSlidingWindow(nums, k); for (int i = 0; i < result.length; i++) { System.out.print(result[i]); if (i < result.length - 1) { System.out.print(" "); } } scanner.close(); } public static int[] maxSlidingWindow(int[] nums, int k) { if (nums == null || nums.length == 0 || k <= 0) { return new int[0]; } int n = nums.length; int[] result = new int[n - k + 1]; Deque<Integer> deque = new LinkedList<>(); int index = 0; for (int i = 0; i < n; i++) { // 保持窗口大小不超过k while (!deque.isEmpty() && deque.peekFirst() < i - k + 1) { deque.pollFirst(); } // 删除队列中小于当前元素的值 while (!deque.isEmpty() && nums[deque.peekLast()] < nums[i]) { deque.pollLast(); } // 将当前元素加入队列尾部 deque.offerLast(i); // 记录窗口中的最大值 if (i >= k - 1) { result[index++] = nums[deque.peekFirst()]; } } return result; }} Python:[此代码未进行大量数据的测试,仅供参考] from collections import dequedef max_sliding_window(nums, k): if not nums or k <= 0: return [] n = len(nums) result = [] deque = deque() for i in range(n): # 保持窗口大小不超过k if deque and deque[0] < i - k + 1: deque.popleft() # 删除队列中小于当前元素的值 while deque and nums[deque[-1]] < nums[i]: deque.pop() # 将当前元素加入队列尾部 deque.append(i) # 记录窗口中的最大值
点赞 2
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
07-29 14:37
门头沟学院 Java
有这写作水平还当什么hr呀
点赞
评论
收藏
分享
昨天 13:27
门头沟学院 Java
如何包装简历上的经历
前言作为一个二本烂仔,校招最窝囊的时候不是面试没面过,而是根本不给面试机会,忆惜当年泪不干,二本简历没人翻。刚开始写简历的时候纯实话实说,一就是一二就是二,后来混迹江湖多年,发现哪有真事啊。工资流水都p,别说简历了。实习经历校招的时候可能很多同学没有过实习经历,整个简历显得很单调,初筛的时候很容易被刷掉,这种情况应该怎么包装呢。两个思路:捏造一段公司经历,这里要看你胆子大不大,不建议写大厂实习经历,容易被检查实习证明,写小公司的话校招很少有做背调的,如果有,也就是打给你提供的实习公司HR电话问一问情况。电话写谁的完全可以自己操作,所以可以找个合适的小公司适当的编一下。根据实验室老师为基础编造一...
简历中的项目经历要怎么写
点赞
评论
收藏
分享
06-21 01:03
门头沟学院 Java
家人们,梦彻底醒了
双非一本,大三下了,今天第一次面试,项目是编的,一问直接露馅了,昨天开始背的八股文,今天全忘了,大学三年确实是玩爽了,今天面试完彻底觉悟了,现在目标秋招了,暑期实习是指望不上了,兄弟们有没有好的建议,本人孙吧七年吧龄,请狠狠压力我,我都能听得进去的
ano_soyori...:
把孙吧吧龄写简历上哪个面试官都要高看你一眼
还记得你第一次面试吗?
点赞
评论
收藏
分享
06-15 01:01
中南大学 嵌入式硬件工程师
简历求痛批
大二,想暑假去找一下嵌入式软件或硬件的开发的实习,第一次做简历,请问下大家这个简历有什么需要修改的吗?纯小白,很多还不熟悉,感觉实习不好找啊
点赞
评论
收藏
分享
07-31 18:22
门头沟学院 测试工程师
也是逆天了
熊大不大:
哈哈,你就说你是男生,也是受害者
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
百度提前批,三面被推迟一周,喜提秋招第一凉
4815
2
...
虾皮秋招一面
3124
3
...
QQ提前批一面凉经
2993
4
...
他拿大厂SSP Offer打牌是什么概念啊?25届双非之光
2636
5
...
百度提前批 三面
2288
6
...
7.30滴滴提前批一面凉经
2130
7
...
7.30百度提前批一面
1793
8
...
上班一周,工资还没拿,先欠公司两千
1511
9
...
小鹏offer
1425
10
...
大家笔试千万不要作弊
1356
创作者周榜
更多
正在热议
更多
#
简历上的经历如何包装
#
26800次浏览
765人参与
#
秋招被确诊为……
#
162649次浏览
731人参与
#
中兴秋招
#
204638次浏览
2288人参与
#
工作中哪个瞬间让你想离职
#
61908次浏览
557人参与
#
你最希望上岸的公司是?
#
134650次浏览
700人参与
#
和同事相处最忌讳的是__
#
22802次浏览
232人参与
#
你最近一次加班是什么时候?
#
70936次浏览
350人参与
#
26届的你,投了哪些公司?
#
40541次浏览
457人参与
#
你遇到最难的面试题目是_
#
16009次浏览
195人参与
#
我对___祛魅了
#
45477次浏览
419人参与
#
研究所VS国企,该如何选
#
194719次浏览
1819人参与
#
地平线求职进展汇总
#
52580次浏览
369人参与
#
如果校招重来我最想改变的是
#
271658次浏览
2849人参与
#
你跟室友的关系怎么样?
#
6597次浏览
104人参与
#
你最讨厌面试问你什么?
#
26983次浏览
302人参与
#
如果可以选,你最想从事什么工作
#
565680次浏览
4699人参与
#
海康威视求职进展汇总
#
493949次浏览
3625人参与
#
什么样的背景能拿SSP?
#
34615次浏览
211人参与
#
秋招前后对offer的期望对比
#
302951次浏览
2229人参与
#
柠檬微趣工作体验
#
6608次浏览
40人参与
#
如何快速融入团队?
#
15713次浏览
194人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务