程序员代码面试指南
SYaoJun
这个作者很懒,什么都没留下…
展开
-
两个有序数组间相加和的Topk问题
题目 两个有序数组间相加和的Topk问题 考查点:堆 + 哈希表 分析 数据是十万,所以考虑O(NlogN)O(NlogN)O(NlogN)以下的解法。因为是TopK问题,所以暗示用堆,每次从堆中取出最大值,所以需要大根堆。放入堆中的元素不能有重复,因此要使用哈希表判重。另外,最大值只能是两种情况。 a数组往前移动一格,a[i-1] + b[j] b数组往前移动一格,a[i] + b[j-1] 所以每次将这两种值扔进大根堆中,取出k个值即为答案。 代码 #include <bits/st原创 2021-10-04 22:52:35 · 912 阅读 · 0 评论 -
拓扑结构相同子树
题目 子结构需要完全相同,可以使用二叉树序列化成字符串之后再比较。 class IdenticalTree { public: bool dfs(TreeNode* A,TreeNode* B){ if(!A || !B) return A == B; return (A->val==B->val) && dfs(A->le...原创 2020-04-09 14:42:08 · 326 阅读 · 0 评论 -
左右最值最大差
题目 给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0…K],右部分A[K+1…N-1],K可以取值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少?给定整数数组A和数组的大小n,请返回题目所求的答案。 测试样例: [2,7,3,1,1],5 返回:6 版本1 预处理数组的最值 从左往右和从右往左 时间复...原创 2020-04-09 11:50:08 · 135 阅读 · 0 评论 -
最短排序
题目 对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。 给定一个整数数组A及它的大小n,请返回最短子数组的长度。 [1,5,3,4,2,6,7],7 4 class ShortSubsequence { public: int findShortest(vector<int> A, int n) { //正向 更新最大值 同时记录最大...原创 2020-04-09 11:14:09 · 198 阅读 · 0 评论 -
整数的二进制数表达中有多少个1
#include <cstdio> #include <iostream> #include <vector> #include <string> #include <bitset> #include <algorithm> using namespace std; int main(){ int x; cin>&g...原创 2019-10-01 08:07:51 · 111 阅读 · 0 评论 -
不用额外变量交换两个整数的值
x^x = 0 0^x = x 异或位运算 #include <cstdio> #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main(){ int m, n; cin>&...原创 2019-09-30 15:09:14 · 113 阅读 · 0 评论 -
字符串的统计字符串
字符串+双指针 #include <cstdio> #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main(){ string str; getline(cin, str); ...原创 2019-09-30 14:58:21 · 83 阅读 · 0 评论 -
判断两个字符串是否互为旋转词
#include <cstdio> #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main(){ int m, n; cin>>m>>n; string...原创 2019-09-30 14:36:23 · 98 阅读 · 0 评论 -
判断两个字符串是否为变形词
#include <cstdio> #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main(){ int m, n; cin>>m>>n; string...原创 2019-09-30 14:32:10 · 146 阅读 · 0 评论 -
在行列都排好序的矩阵中找指定的数
#include <cstdio> #include <iostream> #include <vector> #include <algorithm> using namespace std; const int N = 1003; int arr[N][N]; int main(){ int m, n, x; scanf("%d%d%d",...原创 2019-09-30 14:20:41 · 140 阅读 · 0 评论 -
翻转字符串(1)
#include <cstdio> #include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ char c; string str; int flag = false; while(cin>>str){ ...原创 2019-09-30 13:47:05 · 132 阅读 · 0 评论 -
子数组的最大累加和问题
DP 只要累加和大于零 前面的这部分就有利用价值 在过程中求最大值 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N = 1e5+5; typedef long long LL; int arr[N]; int main(){ i...原创 2019-09-30 11:30:50 · 195 阅读 · 0 评论 -
计算数组的小和
类似于逆序对的问题 使用归并算法 注意整型会溢出,需要使用长整型。 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N = 1e5+5; typedef long long LL; int A[N]; LL merge(int l, ...原创 2019-09-30 11:17:18 · 337 阅读 · 0 评论 -
矩阵的最小路径和
dp+滚动数组 注意边界设定为无穷大,因为每次要求最小值。 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N = 2003; int arr[N][N]; int dp[N]; int main(){ int m, n; scan...原创 2019-09-30 09:40:29 · 178 阅读 · 1 评论 -
数组中未出现的最小正整数
#include <iostream> #include <cstdio> using namespace std; const int N = 1e6+3; int arr[N]; int main(){ int n; scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", arr+i); i...原创 2019-09-30 09:26:03 · 169 阅读 · 0 评论