经典题解析:正整数变 1 的最少操作次数,贪心为什么成立
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料,与任何公司的当前招聘无关。题面很短:给一个正整数 n,每一步如果 n 是偶数就除以 2,如果是奇数可以选择加 1 或减 1,一直处理下去,问最少多少步能变成 1。
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料,与任何公司的当前招聘无关。题面很短:给一个正整数 n,每一步如果 n 是偶数就除以 2,如果是奇数可以选择加 1 或减 1,一直处理下去,问最少多少步能变成 1。
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料,与任何公司的当前招聘无关。「最大频率栈」是数据结构设计题的代表:push 照常压栈,pop 弹出的不是最后压入的,而是当前出现次数最多的元素;次数并列时,弹出这些元素里最近压入的那个。要求 push 和 pop 都足够快。
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料,与任何公司的当前招聘无关。「二叉搜索树中找第 K 小的节点」是树结构面试的高频题——基础解法人尽皆知,区分度全在追问里:还能再快吗?代价是什么?
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料,与任何公司的当前招聘无关。链表逆序输出是链表题里的「入门天花板」——题面一句话,但能一口气问出递归、栈、迭代、边界条件一整串考点。
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料(见文末来源说明),与任何公司的当前招聘无关。KMP 是字符串匹配的经典算法,面试官几乎不问「你会不会背」,问的是「next 数组里存的到底是什么」。
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料(见文末来源说明),与任何公司的当前招聘无关。「数组里第 K 大的元素」几乎人人都会第一反应「排序再取」,面试官真正想听的是后半句:能不能不排完?
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料(见文末来源说明),与任何公司的当前招聘无关。「找数组中出现次数超过一半的元素」这道题,几乎人人都能答出哈希计数,面试官真正想听的是那句进阶要求:O(n) 时间、O(1) 空间,怎么做?
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料(见文末来源说明),与任何公司的当前招聘无关。「判断链表是否有环」几乎人人会答,面试官真正想听的是后半句:环的入口节点是哪一个?以及为什么这样做是对的。
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料(见文末来源说明),与任何公司的当前招聘无关。「两数之和」大概是算法面试里出现频率最高的入门题,但它真正的考点不是会不会做,而是能不能讲清楚复杂度从 O(n²) 降到 O(n) 的那一步是怎么发生的。
想象面试后半程,面试官在屏幕上敲出一道题:平面上给 N 个点,如果不存在另一个点的横、纵坐标都严格比它大,就称它为「最大点」。请输出所有最大点,按横坐标从小到大排列。数据范围:N 最大 50 万,坐标是 0 到 10 亿之间的整数且互不重复,时间限制 1 秒。