笔试题汇总
2021届秋招笔试题汇总
科大讯飞
大疆
美的
商汤科技
[中兴1](#中兴20200824)
汇顶科技
烽火科技
oppo
科大讯飞
美的
中兴2
深信服
网易
VIVO
美团点评
科大讯飞20200815第1题定义一个n*m的数字矩阵,要求你再当中找到两个不在用一行同一列的数组,使得乘积最大
输入描述
第一行数字n、m表示矩阵大小接下来又n行数字,每行m个数字,约定n和m都是小于等于1000,大于等于1的整数。
输出一个数字表示最大的乘积值123456789101112131415161718192021222324252627int main() { int n , m; cin >> n; cin >> m; vector<vector<int>> arr(n, vector<int>(m, 0)); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { ...
题解目录
:books: Leetcode题解目录(转载)转自:🔥【github】
为了进大厂🐛,目前进度208/300题,特此记录刷过的所有题,涵盖了基本题型,精简的解题思路,此repo属于 C++ 版的题解。
感谢您的观看,希望对您有帮助,欢迎热烈的交流🎉!如果感觉还不错就点个赞 star 吧✨✨✨~
这是我的🔥【github】 里面有适合 C++ 萌新的练手项目,热烈欢迎🎉帮助我收集整理题目或者提供解题思路🐳~。
🚀剑指offer题解 🚀程序员面试金典
🎨算法思想
双指针
排序
贪心思想
二分查找
[分治]
[搜索]
动态规划
[数学]
:snowflake:数据结构相关
链表
树
栈和队列
哈希表
字符串
[数组与矩阵]
[图]
位运算
🎨力扣周赛
🐳链表🐳
🐳链表🐳
排序由易到难
19.删除链表的倒数第N个节点
21.合并两个有序链表
24.两两交换链表中的节点
83.删除排序链表中的重复元素
141.环形链表
160.相交链表
206.反转链表
234.回文链表
328.奇偶链表
445.两数相加II
725.分隔链表
817.链表组件
删除链表的倒数第N个节点Leetcode 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
解题思路
使用快慢指针法,让快指针提前先走n+1步,再同步快慢指针直到快指针指向链表结尾时,慢指针刚好停留在需要删除结点的前驱。
添加头结点 dummy 是为了统一对链表增删的操作。
删除结点相当于链接时跳过此结点12345678910111213141516ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* dummy=new ListNode(-1); dummy->next=head; ListNode* fast=dummy; ListNode* slow=d ...
树🌲
:seedling:树
94.二叉树的中序遍历
144.二叉树的前序遍历
145.二叉树的后序遍历
98.验证二叉搜索树
101.对称二叉树
102.二叉树的层序遍历
107.二叉树的层次遍历II
103.二叉树的锯齿形层次遍历
104.二叉树的最大深度
110.平衡二叉树
111.二叉树的最小深度
112.路径总和
124.二叉树中的最大路径和
230.二叉搜索树中第K小的元素
226.翻转二叉树
236.二叉树的最近公共祖先
513.找树左下角的值
617.合并二叉树
687.最长同值路径
671.二叉树中第二小的节点
669.修剪二叉搜索树
701.二叉搜索树中的插入操作
二叉树的中序遍历Leetcode给定一个二叉树,返回它的迭代中序遍历。
解题思路
使用辅助栈,中序遍历是访问顺序左-中-右
所以每到一个节点 A,因为根的访问在中间,将 A 入栈。然后遍历左子树,接着访问 A,最后遍历右子树。在访问完 A 后,A 就可以出栈了。因为 A 和其左子树都已经访问完成。12345678910111213141 ...
🎨程序员面试金典🎨
🎨程序员面试金典🎨转自:🔥【github】
1.判定字符是否唯一
2.判定是否互为字符重排
3.URL化
4.回文排列
5.一次编辑
6.字符串压缩
7.旋转矩阵
8.零矩阵
9.字符串轮转
10.移除重复节点
11.返回倒数第k个节点
12.删除中间节点
13.分割链表
14.链表求和
15.回文链表
16.链表相交
17.环路检测
18.栈的最小值
19.化栈为队
20.栈排序
判定字符是否唯一leetcode实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
解题思路
首先想到哈希表统计各字母出现频率,只遍历一次,频率大于1就返回false。12345678bool isUnique(string astr) { unordered_map<char, int> cnt; for (int i = 0; i < astr.size(); ++i) { cnt[astr[i]]++; if (cnt[astr[i]] > 1) return false; } ...
📸排序📸
📸排序📸
堆排序、快速排序
215.数组中的第K个最大元素
建立哈希表并排序
347.前K个高频元素
451.按照字符出现次数对字符串排序
荷兰国旗问题
75.按颜色进行排序
数组中的第K个最大元素leetcode在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
使用SLT库排序1234int findKthLargest(vector<int>& nums, int k) { sort(nums.begin(), nums.end()); return nums[nums.size() - k];}
堆排序解题思路
堆排序会使用到优先队列priority_queue,可以当成一种高级队列,只不过这个队列是已经排好序的。
维护一个个数为k的小顶堆,堆从从上到下按从小到大排序
始终保持堆的大小为k,超出k就pop(),直到遍历结束位置,堆中存放着前k个最大元素,堆顶的元素就是正确答案。12345678int findKthLa ...
数组
数组
5460. 好数对的数目
好数对的数目leetcode给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。
示例123输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始
解题思路
只要想到用一个二维数组的方式来判断就很简单,用到双层for循环暴力解决。12345678910int numIdenticalPairs(vector<int>& nums) { int cnt = 0; for (int i = 0; i < nums.size(); ++i) { for (int j = 0; j < i; ++j) { if (nums[i] == nums[j]) cnt ++; } ...
栈和队列
🚑栈和队列🚑转自:🔥【github】
7.整数反转
9.回文数
20.有效的括号
232.用栈实现队列
225.用队列实现栈
155.最小栈
150.逆波兰表达式求值
394.字符串解码
133.克隆图
200.岛屿数量
84.柱状图中最大的矩形
542.01矩阵
622.设计循环队列
整数反转Leetcode给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转
解题思路
从低到高位依次加入队列,然后输出
注意反转后的溢出问题123456789int reverse(int x) { int rev=0; while(x!=0){ if(rev>INT_MAX/10 || rev<INT_MIN/10) return 0; rev=rev*10+x%10; x/=10; } return rev;}
回文数Leetcode判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
解题思路 ...
双指针
🐛双指针🐛转自:🔥【github】
19. 删除链表的倒数第N个节点
75.颜色分类
88.合并两个有序数组
167.两数之和II-输入有序数组
345.反转字符串中的元音字母
524.通过删除字母匹配到字典里最长单词
633.平方数之和
647.回文子串
680.验证回文字符串Ⅱ
5461.仅含1的子串数
删除链表的倒数第N个节点leetcode给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
解题思路
使用快慢指针,让快指针提前先走n+1步,然后双指针再同时让前走,当快指针指到结尾时,慢指针指向要删除结点得前驱
为了让整个链表得删除操作都统一起来,所以加入了头节点dummy,因为删除某个结点得操作需要它得前驱,而第一个结点没有前驱,所以加入头结点会更方便,删除操作与其他结点统一。
链表所谓删除结点,即前一个结点得next指针越过此结点,指向下一结点12345678910111213141516ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* dummy = ...