第十九周:[sicily] 算法机考模拟题
来源:互联网 发布:linux 虚拟机 双系统 编辑:程序博客网 时间:2024/06/06 04:39
1000. 函数求值
保存历层结果暴力破解
int F(int k, int n) { int a[k+2][n+2]; for(int i = 0; i < n+1; i++) a[0][i] = i; for (int i = 0; i < k; i++) { int total = 0; for (int j = 1; j <= n; j++) { total += a[i][j]; a[i+1][j] = total; } } return a[k][n]; }
1001.会议安排
对A、B增序排序,按顺序比较算出最大会议数
int assignConferenceRoom(vector<int>& A, vector<int>& B) { sort(A.begin(), A.end()); sort(B.begin(), B.end()); int res = 0; for(int j = 0; res<A.size() && j < B.size();j++) { if (A[res] <= B[j]) { res++; } } return res; }
1002.等价二叉树
递归求解即可
bool isEqual(TreeNode* p, TreeNode* q) { if(p == NULL && q == NULL) return true; if(p == NULL || q == NULL) return false; return (p->val == q->val)&&isEqual(p->left,q->left) && isEqual(p->right,q->right); }
1003. 相连的1
循环查找到1则进行深度搜索,查找到1则置为0
void changeRightBottom(vector<vector<char>>& A, int x, int y, int& r, int& c) { A[x][y] = '0'; if(x+1 < r && A[x+1][y]=='1') changeRightBottom(A,x+1,y,r,c); if(x > 0 && A[x-1][y]=='1')changeRightBottom(A,x-1,y,r,c); if(y+1 < c && A[x][y+1]=='1') changeRightBottom(A,x,y+1,r,c); if(y > 0 && A[x][y-1]=='1') changeRightBottom(A,x,y-1,r,c);}int countConnectedOnes(vector<vector<char>>& A) { int row = A.size(); if(row == 0) return 0; int col = A[0].size(); if(col == 0) return 0; int res = 0; for(int i = 0; i < row; i++) { for(int j = 0; j < col; j++) { if(A[i][j]!='0') { changeRightBottom(A, i, j, row, col); res++; } } } return res;}
1004.判断无环图
转换成图后,进行深度优先搜索,有重复入栈为有环图,返回false
bool DFS(vector<vector<int>>& g, vector<int>& s, int index){ if(find(s.begin(), s.end(), index) != s.end()) return false; s.push_back(index); for(int i = 0; i < g[index].size(); i++) { if(!DFS(g, s, g[index][i])) return false; } s.pop_back(); return true;}bool isDAG(int n, vector<pair<int, int>>& edges) { if(n < 2) return true; vector<vector<int>> graph(n); for(int i = 0; i < edges.size(); i++) { int in = edges[i].first, out = edges[i].second; graph[in].push_back(out); } vector<int> s; for(int i = 0; i < n; i++){ if(!DFS(graph, s, i))return false; } return true;}
1005.最大和
动态规划:起始状态为a[0] = A[0], a[1] = max(A[1], A[0]), 转移方程a[i] = max(A[i] + a[i-2], a[i-1])
int maxSum(vector<int>& A) { int a[100000] = {0}; a[0] = A[0]; a[1] = A[1] > A[0] ? A[1]:A[0]; for(int i = 2; i < A.size(); i++){ a[i] = max(A[i] + a[i-2], a[i-1]); } return a[A.size() - 1]; }
1006.单词变换
课本原题:dp[i][j]表示长度为i的word1与长度为j的word2
int minDistance(string word1, string word2) { int l1 = word1.size(), l2 = word2.size(), ll1 = l1+1, ll2 = l2+1; vector<vector<int>> d(ll1, vector<int>(ll2, 0)); for(int i = 0; i < ll2; i++) d[0][i] = i; for(int i = 0; i < ll1; i++) d[i][0] = i; for(int i = 1; i < ll1; i++) { for(int j = 1; j < ll2; j++) { if(word1[i-1] == word2[j-1]) d[i][j] = d[i-1][j-1]; else { int m = min(d[i-1][j], d[i][j-1]); d[i][j] = min(m, d[i-1][j-1]) + 1; } } } return d[l1][l2];}
阅读全文
0 0
- 第十九周:[sicily] 算法机考模拟题
- 算法作业_44(2017.6.27第十九周)(算法机考模拟题4)
- Sicily 无环图 | 算法期末机考模拟题
- Sicily 相连的1 | 算法期末机考模拟题
- Sicily 会议安排 | 算法期末机考模拟题
- Sicily 最大和 | 期末算法机考模拟题
- 第十七周:[Sicily]机考模拟题1000-1006
- 算法机考模拟题
- sicily-C++机考模拟考-1000. 购买电脑
- 8道算法机考模拟题
- 算法机考模拟题 part1
- 算法机考模拟题 part2
- Sicily期末算法模拟题
- Sicily 算法模拟题 1001
- 算法作业_33(2017.6.16第十七周)(算法机考模拟题1)
- 算法作业_34(2017.6.16第十七周)(算法机考模拟题2)
- 算法作业_35(2017.6.16第十七周)(算法机考模拟题3)
- 算法作业_36(2017.6.16第十七周)(算法机考模拟题5)
- 程序的调试
- 配置IP
- 敏感字过滤器
- Linux驱动技术(七) _内核定时器与延迟工作
- Android自定义动画专题二
- 第十九周:[sicily] 算法机考模拟题
- php 三种基础设计模式结合使用
- awk技巧总结
- Dell-1080Ti 深度学习Win 10 + Ubuntu 16.04.02 双系统安装+anaconda2+tensorflow+opencv3.2+caffe
- leetcode 第十三周算法报告
- Mac版程序员喜欢的键位 -- macos Sierra 版本
- 关于Mysql数据库插入数据失败的原因
- Linux学习之文件搜索命令(二)其他搜索命令 locate |which|whereis|grep
- mycat 的那些事(推荐)