当前位置: 首页 > article >正文

大厂笔试面试八股文-算法-数组常考题-final

刷了200道数组题,笔试面试还是不会做?这10道搞懂就够了刷了200道数组题,面试还是不会做?问题不是你刷得不够多,而是没抓住核心套路。我整理了35道大厂真题,发现其实就5个核心技巧。今天把最重要的10道题和背后的套路,全部分享给你。offer直通车-大厂校招大礼包入口 这10道题是:两数之和- 哈希表基础三数之和- 双指针经典合并两个有序数组- 双指针应用盛最多水的容器- 对撞指针接雨水- 单调栈经典最大子序和- 动态规划入门螺旋矩阵- 矩阵遍历旋转图像- 矩阵操作缺失的第一个正数- 原地哈希最长连续序列- 哈希表优化 为什么是这10道题?数据不会骗人我分析了35道数组高频题,发现:这10道题覆盖了5个核心技巧掌握这10道,其他题目都能举一反三不是题目多就好,而是要抓住本质不是题海战术,是套路识别很多人刷题的问题在于:刷了100道,每道都是新题看到题目,不知道用什么方法面试时,脑子一片空白真正高效的刷题方法:先掌握核心套路再通过题目强化套路最后做到看到题目就知道用什么套路这10道题,就是帮你建立套路识别能力的最佳选择。 核心技巧1:双指针为什么双指针这么重要?双指针是数组题的瑞士军刀,适用场景最广。核心思想:用两个指针,从不同位置或方向遍历数组,降低时间复杂度。三种模式:对撞指针:从两端向中间快慢指针:一个快一个慢滑动窗口:维护一个区间题目1:两数之和题目描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。为什么重要:最基础的哈希表应用面试出现频率极高是三数之和、四数之和的基础核心思路:用哈希表存储已遍历的数字,查找时间从O(n)降到O(1)。代码实现:vectorint twoSum(vectorint nums, int target) { unordered_mapint, int hash; for (int i 0; i nums.size(); i) { int complement target - nums[i]; if (hash.count(complement)) { return {hash[complement], i}; } hash[nums[i]] i; } return {}; }时间复杂度: O(n)空间复杂度: O(n)面试要点:能说出暴力解法(O(n²))和优化解法(O(n))注意边界:数组为空、只有两个元素注意重复元素的处理题目2:三数之和题目描述: 给定一个数组,找出所有和为0的三元组。为什么重要:双指针的经典应用考察去重能力是N数之和的通用模板核心思路:先排序固定一个数,剩下两个数用双指针注意去重代码实现:vectorvectorint threeSum(vectorint nums) { vectorvectorint result; sort(nums.begin(), nums.end()); for (int i 0; i nums.size(); i) { if (i 0 nums[i] nums[i-1]) continue; // 去重 int left i 1, right nums.size() - 1; while (left right) { int sum nums[i] nums[left] nums[right]; if (sum 0) { result.push_back({nums[i], nums[left], nums[right]}); while (left right nums[left] nums[left1]) left; // 去重 while (left right nums[right] nums[right-1]) right--; // 去重 left; right--; } else if (sum 0) { left; } else { right--; } } } return result; }时间复杂度: O(n²)空间复杂度: O(1)面试要点:为什么要先排序?如何去重?(三个位置都要去重)能扩展到四数之和吗?题目3:合并两个有序数组题目描述: 将两个有序数组合并到第一个数组中,保持有序。为什么重要:双指针最简单的应用考察从后往前遍历的技巧归并排序的基础核心思路:从后往前填充,避免覆盖未处理的元素。代码实现:void merge(vectorint nums1, int m, vectorint nums2, int n) { int i m - 1, j n - 1, k m n - 1; while (i 0 j 0) { if (nums1[i] nums2[j]) { nums1[k--] nums1[i--]; } else { nums1[k--] nums2[j--]; } } while (j 0) { nums1[k--] nums2[j--]; } }时间复杂度: O(mn)空间复杂度: O(1)面试要点:为什么从后往前?如果从前往后会怎样?只需要处理nums2剩余元素,为什么?题目4:盛最多水的容器题目描述: 给定n个非负整数,每个数代表坐标中的一个点(i, ai)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。为什么重要:对撞指针的经典应用考察贪心思想面试高频题核心思路:双指针从两端向中间移动,每次移动较短的那条边。为什么移动短边?容器的容量由短边决定移动长边,容量只会变小移动短边,容量可能变大代码实现:int maxArea(vectorint height) { int left 0, right height.size() - 1; int maxWater 0; while (left right) { int h min(height[left], height[right]); int w right - left; maxWater max(maxWater, h * w); if (height[left] height[right]) { left; } else { right--; } } return maxWater; }时间复杂度: O(n)空间复杂度: O(1)面试要点:能解释为什么移动短边能证明这个贪心策略的正确性和接雨水的区别是什么? 核心技巧2:单调栈什么是单调栈?单调栈是一种特殊的栈,栈内元素保持单调递增或递减。适用场景:找下一个更大/更小的元素找左右边界矩形面积问题题目5:接雨水题目描述: 给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。为什么重要:单调栈的经典应用有多种解法(动态规划、双指针、单调栈)面试超高频题核心思路(单调栈):维护一个单调递减栈,遇到比栈顶大的元素时,说明可以接水。代码实现:int trap(vectorint height) { stackint st; int water 0; for (int i 0; i height.size(); i) { while (!st.empty() height[i] height[st.top()]) { int top st.top(); st.pop(); if (st.empty()) break; int distance i - st.top() - 1; int h min(height[i], height[st.top()]) - height[top]; water distance * h; } st.push(i); } return water; }时间复杂度: O(n)空间复杂度: O(n)面试要点:能说出至少2种解法单调栈解法的核心思想和盛最多水的容器有什么区别? 核心技巧3:动态规划动态规划的核心四步走:定义状态写出状态转移方程初始化确定遍历顺序题目6:最大子序和题目描述: 给定一个整数数组,找到一个具有最大和的连续子数组。为什么重要:动态规划入门题Kadane算法的经典应用面试必考核心思路:dp[i]表示以i结尾的最大子序和。状态转移方程:dp[i] max(dp[i-1] nums[i], nums[i])代码实现:int maxSubArray(vectorint nums) { int maxSum nums[0]; int currentSum nums[0]; for (int i 1; i nums.size(); i) { currentSum max(currentSum nums[i], nums[i]); maxSum max(maxSum, currentSum); } return maxSum; }时间复杂度: O(n)空间复杂度: O(1)面试要点:能写出状态转移方程能优化空间复杂度(滚动变量)如果要返回子数组的起止位置怎么办? 核心技巧4:矩阵操作矩阵题的通用技巧找规律(旋转、螺旋)原地修改(用特殊值标记)分层处理题目7:螺旋矩阵题目描述: 给定一个m x n的矩阵,按照螺旋顺序返回矩阵中的所有元素。为什么重要:考察边界处理能力模拟类题目的代表面试常考核心思路:按层遍历,每层按照右→下→左→上的顺序。代码实现:vectorint spiralOrder(vectorvectorint matrix) { vectorint result; if (matrix.empty()) return result; int top 0, bottom matrix.size() - 1; int left 0, right matrix[0].size() - 1; while (top bottom left right) { // 右 for (int i left; i right; i) { result.push_back(matrix[top][i]); } top; // 下 for (int i top; i bottom; i) { result.push_back(matrix[i][right]); } right--; // 左 if (top bottom) { for (int i right; i left; i--) { result.push_back(matrix[bottom][i]); } bottom--; } // 上 if (left right) { for (int i bottom; i top; i--) { result.push_back(matrix[i][left]); } left; } } return result; }时间复杂度: O(m×n)空间复杂度: O(1)面试要点:边界条件的处理(为什么左和上要加判断?)能画图说明遍历过程螺旋矩阵II(生成螺旋矩阵)会做吗?题目8:旋转图像题目描述: 给定一个n×n的二维矩阵表示一个图像,将图像顺时针旋转90度。要求原地旋转。为什么重要:考察找规律能力原地操作的经典题面试常考核心思路:先转置,再翻转每一行。代码实现:void rotate(vectorvectorint matrix) { int n matrix.size(); // 转置 for (int i 0; i n; i) { for (int j i 1; j n; j) { swap(matrix[i][j], matrix[j][i]); } } // 翻转每一行 for (int i 0; i n; i) { reverse(matrix[i].begin(), matrix[i].end()); } }时间复杂度: O(n²)空间复杂度: O(1)面试要点:为什么先转置再翻转?如果是逆时针旋转怎么办?如果是旋转180度呢? 核心技巧5:原地修改 哈希表什么时候用原地修改?空间复杂度要求O(1)数组元素范围有限可以用特殊值标记题目9:缺失的第一个正数题目描述: 给定一个未排序的整数数组,找出其中没有出现的最小的正整数。要求O(n)时间和O(1)空间。为什么重要:原地哈希的经典应用考察空间优化能力面试难题核心思路:把每个数放到它应该在的位置(nums[i] i1)。代码实现:int firstMissingPositive(vectorint nums) { int n nums.size(); // 把每个数放到正确位置 for (int i 0; i n; i) { while (nums[i] 0 nums[i] n nums[nums[i] - 1] ! nums[i]) { swap(nums[i], nums[nums[i] - 1]); } } // 找第一个不在正确位置的数 for (int i 0; i n; i) { if (nums[i] ! i 1) { return i 1; } } return n 1; }时间复杂度: O(n)空间复杂度: O(1)面试要点:为什么时间复杂度是O(n)?(每个元素最多交换一次)如何实现原地哈希?边界条件的处理题目10:最长连续序列题目描述: 给定一个未排序的整数数组,找出最长连续序列的长度。要求O(n)时间。为什么重要:哈希表的巧妙应用考察优化思维面试高频题核心思路:用哈希表存储所有数字,然后只从序列的起点开始计数。代码实现:int longestConsecutive(vectorint nums) { unordered_setint numSet(nums.begin(), nums.end()); int maxLen 0; for (int num : numSet) { // 只从序列起点开始 if (!numSet.count(num - 1)) { int currentNum num; int currentLen 1; while (numSet.count(currentNum 1)) { currentNum; currentLen; } maxLen max(maxLen, currentLen); } } return maxLen; }时间复杂度: O(n)空间复杂度: O(n)面试要点:为什么只从序列起点开始?(避免重复计算)如何保证时间复杂度是O(n)?如果要求O(1)空间怎么办?(先排序,O(nlogn)时间) 如何举一反三?套路识别清单看到题目,先问自己:1. 是否需要查找/去重?→ 考虑哈希表2. 是否需要优化时间复杂度?→ 考虑双指针、二分查找3. 是否有下一个更大/更小?→ 考虑单调栈4. 是否有最优子结构?→ 考虑动态规划5. 是否需要原地操作?→ 考虑原地哈希、标记法刷题建议第一遍:理解套路这10道题,每道都要手写一遍理解为什么用这个方法能说出时间和空间复杂度第二遍:变形练习两数之和 → 三数之和 → 四数之和螺旋矩阵 → 螺旋矩阵II旋转图像 → 逆时针旋转第三遍:总结模板双指针模板单调栈模板动态规划模板面试技巧1. 先说思路,再写代码不要上来就写先和面试官确认思路得到认可再动手2. 注意边界条件数组为空只有一个元素所有元素相同3. 分析复杂度写完代码后主动说明能说出优化方向4. 测试用例正常用例边界用例特殊用例

相关文章:

大厂笔试面试八股文-算法-数组常考题-final

刷了200道数组题,笔试面试还是不会做?这10道搞懂就够了 刷了200道数组题,面试还是不会做? 问题不是你刷得不够多,而是没抓住核心套路。 我整理了35道大厂真题,发现其实就5个核心技巧。今天把最重要的10道题和背后的套路,全部分享给你。 offer直通车-大厂校招大礼包&#x…...

晶闸管全球市场:2026-2032年CAGR为3.4%

据恒州诚思调研统计,2025年全球晶闸管收入规模约59.96亿元,到2032年收入规模将接近75.71亿元,2026-2032年CAGR为3.4%。晶闸管作为功率半导体领域的核心器件,凭借其独特的性能在众多电力电子场景中发挥着关键作用。全球晶闸管&…...

如何在3天内快速掌握音频驱动面部动画技术?完整实战指南 [特殊字符]

如何在3天内快速掌握音频驱动面部动画技术?完整实战指南 🚀 【免费下载链接】FACEGOOD-Audio2Face http://www.facegood.cc 项目地址: https://gitcode.com/gh_mirrors/fa/FACEGOOD-Audio2Face 想要让虚拟角色拥有逼真的面部表情吗?FA…...

我的上课记

...

4步完成Axure本地化设置:让新手轻松上手的中文界面方案

4步完成Axure本地化设置:让新手轻松上手的中文界面方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...

Lychee Rerank MM GPU算力:Qwen2.5-VL 7B模型在A10上16GB显存高效运行

Lychee Rerank MM GPU算力:Qwen2.5-VL 7B模型在A10上16GB显存高效运行 1. 引言:当多模态检索遇到“选择困难症” 想象一下,你正在一个庞大的多媒体资料库里搜索。你输入“一只在草地上玩耍的棕色小狗”,系统返回了100个结果&…...

[vxe-table] 动态列渲染中v-if与key的协同优化方案

1. 动态列渲染的常见问题与根源分析 在使用vxe-table进行动态列渲染时,很多开发者都遇到过这样的场景:当表格列通过v-if条件动态显示或隐藏时,列的位置和样式会出现莫名其妙的错乱。比如原本应该在第三列显示的数据突然跳到了第五列&#xff…...

保姆级教程:在CompactLogix 5380上配置AB_Socket_TCP库,实现断线重连与自动收发

工业级TCP通信实战:CompactLogix 5380双IP配置与AB_Socket_TCP库深度应用 在工业自动化领域,稳定可靠的通信系统如同生产线的神经系统。当一台CompactLogix 5380控制器需要7x24小时不间断地与上位机、传感器网络或第三方设备交换数据时,传统的…...

百川2-13B模型API调用详解:从Python安装到第一个成功请求

百川2-13B模型API调用详解:从Python安装到第一个成功请求 你是不是也对大模型API调用感到好奇,但一看到那些技术文档就头疼?别担心,今天咱们就来手把手走一遍,从零开始,用最简单的Python代码,完…...

writeup

3-hafuhafu - Writeup by AI 题目信息 项目内容平台BugKu类型Crypto (RSA)考点RSA 加密、大数分解、私钥计算 题目描述 题目给出了一个 RSA 公钥和一段 Base64 编码的密文,要求解密得到 flag。 公钥信息: pk (25572000680139535995611501720832880…...

不止于配置:用Horizon UAG 21.11打造安全外网访问,别忘了这些加固设置

超越基础配置:Horizon UAG 21.11安全加固全指南 在虚拟桌面架构中,统一接入网关(UAG)作为内外网流量的安全屏障,其配置合理性直接影响整体架构的安全性。许多管理员在完成UAG基础部署后,往往忽略了更深层次…...

BT33F双基二极管的基本特性

简 介: 本文测试了BT33F双基二极管的特性,发现其发射极对两个基极呈现不同导通电压(0.86V和1.6V),B1、B2间电阻约13KΩ。实验表明,只有当B1接地、B2接5V电源时,电路才能产生46Hz的振荡信号&…...

RSA2 - Writeup by AI

RSA2 - Writeup by AI 题目信息项目内容题目来源Bugku CTF题目类型Crypto (密码学)考点RSA 小指数攻击、Rabin 加密题目描述 给定 RSA 加密参数: 加密指数 e 2模数 N(3072 位)密文 c 要求解密得到 flag。 考点分析 核心知识点 RSA 小指数攻击…...

4步解决RetroArch缩略图显示异常,恢复游戏库视觉体验

4步解决RetroArch缩略图显示异常,恢复游戏库视觉体验 【免费下载链接】RetroArch Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3. 项目地址: https://gitcode.com/GitHub_Trending/re/RetroArch 在RetroArch的使用过程中&am…...

TMSpeech:开源本地语音转文字工具的隐私革命

TMSpeech:开源本地语音转文字工具的隐私革命 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 在数字化办公浪潮中,语音转文字工具已成为效率提升的关键助手,但云端处理的隐私泄露风…...

Qwen3.5-9B-AWQ-4bit多模态落地:制造业设备铭牌识别→型号查询→维保文档匹配

Qwen3.5-9B-AWQ-4bit多模态落地:制造业设备铭牌识别→型号查询→维保文档匹配 1. 制造业设备管理的痛点与解决方案 在制造业设备管理中,设备铭牌识别、型号查询和维保文档匹配是三个关键但繁琐的环节。传统方式需要人工拍照、记录铭牌信息,…...

告别ViT的笨重:手把手教你用SegFormer在Cityscapes数据集上实现高效语义分割

告别ViT的笨重:手把手教你用SegFormer在Cityscapes数据集上实现高效语义分割 在自动驾驶、遥感影像分析等计算机视觉应用中,语义分割技术扮演着关键角色。传统基于卷积神经网络(CNN)的方法虽然取得了显著进展,但面临着…...

Windows右键菜单终极管理指南:用ContextMenuManager轻松掌控右键菜单

Windows右键菜单终极管理指南:用ContextMenuManager轻松掌控右键菜单 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为杂乱的Windows右键菜单烦…...

从零到一:MicroPython 环境搭建与首个硬件交互项目实战

1. 初识MicroPython:为什么选择它? 第一次接触MicroPython时,我正为一个智能家居项目寻找合适的开发方案。当时被它"Python on hardware"的理念吸引——毕竟谁能拒绝用熟悉的Python语法直接控制硬件呢?MicroPython本质上…...

突破平台限制:res-downloader高效捕获网络资源的全方位解决方案

突破平台限制:res-downloader高效捕获网络资源的全方位解决方案 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在…...

【小白友好】Qwen2.5-VL-7B-Instruct快速上手:无需代码的图文智能问答工具

Qwen2.5-VL-7B-Instruct快速上手:无需代码的图文智能问答工具 1. 工具简介 Qwen2.5-VL-7B-Instruct是一款基于阿里通义千问多模态大模型的视觉交互工具,专为RTX 4090显卡优化。它最大的特点是完全可视化操作,无需编写任何代码就能实现强大的…...

PADS VX2.7实战指南:Router高效布线与等长设计技巧

1. PADS Router高效布线基础技巧 刚接触PADS Router时,最让我头疼的就是布线效率问题。后来发现,合理设置软件参数和掌握快捷键能极大提升工作效率。在PADS VX2.7中,Router工具的布线功能比Layout更加强大,特别适合处理复杂的高速…...

Linux信号机制:原理、处理与实践

1. Linux信号机制基础解析在Linux系统中,信号是一种进程间通信的重要机制。想象一下你正在厨房做饭,突然门铃响了——这个门铃就相当于Linux系统中的信号,它打断了你当前的工作流程,迫使你做出响应。信号本质上是一种异步事件通知…...

HUNYUAN-MT 7B翻译终端性能展示:并发请求压力测试与响应时间报告

HUNYUAN-MT 7B翻译终端性能展示:并发请求压力测试与响应时间报告 最近在星图GPU平台上部署了HUNYUAN-MT 7B翻译终端,很多朋友都好奇它的实际表现到底怎么样。特别是当多个用户同时使用时,它还能不能保持快速响应?会不会因为压力太…...

深入解析 iOS 上 fixed 底栏与滚动容器的手势冲突:从 H5 修复到原生根治

在移动端 H5 开发中,我们时常遇到这样的场景:页面底部有一个固定定位(position: fixed)的按钮栏或底栏,上方是一个可滚动的长列表。在 iOS 设备上,当用户尝试从底部 fixed 区域起手向上滑动时,列表却纹丝不动,仿佛被“粘”住了。这个现象不是偶发 bug,而是 iOS 对 fix…...

Qwen3-VL:30B多模态提示词工程:Clawdbot中优化图文提问格式提升飞书响应质量

Qwen3-VL:30B多模态提示词工程:Clawdbot中优化图文提问格式提升飞书响应质量 1. 引言:从部署到优化的进阶之路 在上一篇文章中,我们已经成功在星图AI云平台部署了Qwen3-VL:30B多模态大模型,并通过Clawdbot搭建了基础框架。现在面…...

微电网调度(风、光、储能、电网交互)附MatlabPython代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

FLAC3D蠕变三轴压缩试验:博格斯摩尔本构应变时间曲线

FLAC3D蠕变三轴压缩试验:博格斯摩尔本构,应变时间曲线在岩土工程数值模拟里,蠕变试验就像给材料做"慢动作回放"。今天咱们拿FLAC3D折腾个博格斯摩尔(Burgers-Malvern)模型的蠕变三轴压缩试验,重点…...

忍者像素绘卷效果实测:同一Prompt下不同步数对像素锐度影响对比分析

忍者像素绘卷效果实测:同一Prompt下不同步数对像素锐度影响对比分析 1. 测试背景与目的 忍者像素绘卷作为一款基于Z-Image-Turbo深度优化的图像生成工具,其独特的16-Bit复古游戏美学风格吸引了大量创作者。在实际使用中,我们发现"描绘…...

2026年的具身智能:不再“讲故事”,而是拼“分数”?

作者:刘致呈编辑:Evin审核:徐徐出品:互联网江湖最近,具身智能行业发生了两件大事:一是行业标杆——宇树科技要IPO了。二是中国信息通信研究院联合40余家单位共同起草的具身智能领域首个行业标准,正式发布了…...