剑指 Offer II 101. 分割等和子集

 bool canPartition(vector<int>& nums) {int sum=0;for(int i=0;i<nums.size();i++) sum+=nums[i];if(sum%2==1) return false;int n=nums.size();int f[sum/2+1];memset(f,0,sizeof(f));for(int i=1;i<=n;i++){for(int j=sum/2;j>=nums[i-1];j--){// cout<<j<<" "<<j-nums[i-1]<< " "<<sum/2<<endl;f[j]=max(f[j],f[j-nums[i-1]]+nums[i-1]);}}if(f[sum/2]==sum/2) return true;else return false;}

剑指 Offer II 102. 加减的目标值

bool canPartition(vector<int>& nums) {int sum=0;for(int i=0;i<nums.size();i++) sum+=nums[i];if(sum%2==1) return false;int n=nums.size();int f[sum/2+1];memset(f,0,sizeof(f));for(int i=1;i<=n;i++){for(int j=sum/2;j>=nums[i-1];j--){// cout<<j<<" "<<j-nums[i-1]<< " "<<sum/2<<endl;f[j]=max(f[j],f[j-nums[i-1]]+nums[i-1]);}}if(f[sum/2]==sum/2) return true;else return false;}

剑指 Offer II 103. 最少的硬币数目

int coinChange(vector<int>& coins, int amount) {int n=coins.size();long f[amount+1];memset(f,0,sizeof(f));for(int j=0;j<=amount;j++) f[j]=INT_MAX;f[0]=0;for(int i=1;i<=n;i++){for(int j=coins[i-1];j<=amount;j++){ f[j]=min(f[j],f[j-coins[i-1]]+1);}}if(f[amount]==INT_MAX) return -1;return f[amount];}   

剑指 Offer II 104. 排列的数目

注意这里如果用二维想法->前i个表示体积前j个表示前j个种类是区别不了组合数的,结果和前i个表示种类前j个表示前j个体积一样!!!如果想表示组合数则要化为一位数组。若要用二维解题可以用--->f[i][j]:所有从前i个位置中选,且总体积恰好是j的所有方案。这种想法解题,但是这种会多出一维出来。

int res=0;int combinationSum4(vector<int>& nums, int target) {int n=nums.size();nums.insert(nums.begin(),0);int f[target+1];memset(f,0,sizeof(f));f[0]=1;for(int i=1;i<=target;i++){for(int j=1;j<=n;j++){if(i>=nums[j]&&f[i] < INT_MAX - f[i - nums[j]]) f[i]+=f[i-nums[j]];}}return f[target]; }

二维:

int combinationSum4(vector<int>& nums, int target) {int n=nums.size();nums.insert(nums.begin(),0);int f[target+1][target+1];memset(f,0,sizeof(f));for(int i=0;i<=target;i++) f[i][0] =1;for(int i=1;i<=target;i++){for(int j=1;j<=target;j++){for(int k=1;k<=n;k++){if(j>=nums[k]&&f[i][j]<INT_MAX-f[i][j-nums[k]]) f[i][j]+=f[i][j-nums[k]];}}}return f[target][target]; }

剑指 Offer II 105. 岛屿的最大面积

int maxAreaOfIsland(vector<vector<int>>& grid) {int res=0;int n=grid.size(),m=grid[0].size();int sum=0;vector<vector<bool>> st(n,vector<bool>(m));for(int i=0;i<n;i++){for(int j=0;j<m;j++){sum=0;if(st[i][j]||grid[i][j]==0) continue;sum++;st[i][j]=true;dfs(i,j,sum,grid,st);res=max(res,sum);}}return res;}int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};void dfs(int x,int y,int& sum,vector<vector<int>>grid,vector<vector<bool>>& st){int n=grid.size(),m=grid[0].size();for(int i=0;i<4;i++){int X=x+dx[i],Y=y+dy[i];if(X>=n||X<0||Y>=m||Y<0||st[X][Y]||grid[X][Y]==0) continue;sum++;st[X][Y]=true;dfs(X,Y,sum,grid,st);}}

剑指 Offer II 106. 二分图

vector<int>color;bool isBipartite(vector<vector<int>>& graph) {for(int i=0;i<graph.size();i++) color.push_back(0);bool flag=true;for(int i=0;i<graph.size();i++){if(!color[i]){if(!dfs(i,1,graph))  return false;}}return true;}bool dfs(int u,int c,vector<vector<int>> graph){color[u]=c;for(int i=0;i<graph[u].size();i++){int j=graph[u][i];if(!color[j]){if(!dfs(j,3-c,graph)) return false;}else if(color[j]==c) return false;}return true;}
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {unordered_map<string ,int> dist;unordered_map<string ,int> map;wordList.push_back(beginWord);for(int i=0;i<wordList.size();i++) map[wordList[i]]++;int res=1;queue<string> q;q.push(beginWord);dist[beginWord]=1;while(q.size()){auto cc=q.front();q.pop();string ori=cc;for(int i=0;i<cc.size();i++){string t=ori;for(char c='a';c<='z';c++){t[i]=c;if(!dist[t]&&map[t]){dist[t]=dist[ori]+1;if(t==endWord) return dist[t];q.push(t);}}}}return 0;}

剑指 Offer II 108. 单词演变

int ladderLength(string beginWord, string endWord, vector<string>& wordList) {unordered_map<string ,int> dist;unordered_map<string ,int> map;wordList.push_back(beginWord);for(int i=0;i<wordList.size();i++) map[wordList[i]]++;if(!map[endWord]) return 0;int res=1;queue<string> q;q.push(endWord);dist[endWord]=1;while(q.size()){auto cc=q.front();q.pop();string ori=cc;for(int i=0;i<cc.size();i++){string t=ori;for(char c='a';c<='z';c++){t[i]=c;if(!dist[t]&&map[t]){dist[t]=dist[ori]+1;if(t==beginWord) return dist[t];q.push(t);}}}}return 0;}

剑指 Offer II 109. 开密码锁

 int openLock(vector<string>& deadends, string target) {int res=0;unordered_map<string,int> map;unordered_map<string,int> dist;for(int i=0;i<deadends.size();i++) map[deadends[i]]++;if(map["0000"]) return -1;if(target=="0000") return 0;queue<string>q;q.push("0000");dist["0000"]=1;while(q.size()){auto cc=q.front();q.pop();string ori=cc;for(int i=0;i<4;i++){ cc=ori;if(cc[i]=='9') cc[i]='0';else cc[i]++;if(!map[cc]&&!dist[cc]){dist[cc]=dist[ori]+1;if(cc==target) return dist[cc]-1;q.push(cc);}cc=ori;if(cc[i]=='0') cc[i]='9';else cc[i]--;if(!map[cc]&&!dist[cc]){dist[cc]=dist[ori]+1;if(cc==target) return dist[cc]-1;q.push(cc);}}}return -1;}

剑指 Offer II 110. 所有路径

vector<vector<int>> res;int n;vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {if(graph.size()==0||graph[0].size()==0) return res;n=graph.size()-1;vector<int>xx;xx.push_back(0);dfs(0,graph,xx);return res;}void dfs(int u ,vector<vector<int>> graph,vector<int> xx){if(xx.back()==n){res.push_back(xx);return ;} for(int i=0;i<graph[u].size();i++){xx.push_back(graph[u][i]);dfs(graph[u][i],graph,xx);xx.pop_back();}}

剑指 Offer II 111. 计算除法

map<pair<string,string>,double> map;unordered_map<string,bool> f;vector<double>res;vector<double> calcEquation(vector<vector<string>>& equations, vector<double>& values, vector<vector<string>>& queries) {for(int i=0;i<equations.size();i++){pair<string,string> pss,pssf;pss.first=equations[i][0];pssf.first=equations[i][1];pss.second=equations[i][1];pssf.second=equations[i][0];map[pss]=values[i];map[pssf]=1.0/values[i];f[equations[i][0]]=true;f[equations[i][1]]=true;} for(int i=0;i<queries.size();i++){unordered_map<string,bool> st;vector<string> u=queries[i];string aa=u[0],bb=u[1];int sz=res.size();if(!f[aa]||!f[bb]) res.push_back(-1);else if(aa==bb&&f[aa]) res.push_back(1);else {if(i==queries.size()-1) cout<<res.size()<<endl;dfs(aa,bb,1,st);if(sz==res.size()) res.push_back(-1);}}return res;}int dfs(string aa,string bb,double xx,unordered_map<string,bool>& st){if(aa==bb) {res.push_back(xx);return 1;}for(auto cc: map){if(st[aa]) continue;if(cc.first.first!=aa) continue;st[aa]=true;if(dfs(cc.first.second,bb,xx*cc.second,st)) return 1;st[aa]=false;}return 0;}

剑指 Offer II 112. 最长递增路径

 int n,m;int cnt=0;int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};vector<vector<int>> dist;vector<vector<int>> g;int longestIncreasingPath(vector<vector<int>>& matrix) {g=matrix;if (matrix.empty()) return 0;n=matrix.size(),m=matrix[0].size();dist=vector<vector<int>>(n,vector<int>(m,0));int res=1;for(int i=0;i<n;i++){for(int j=0;j<m;j++){res=max(res,dfs(i,j));}}return res;}int dfs(int X,int Y){if(!dist[X][Y]) dist[X][Y]=1;else return dist[X][Y];for(int i=0;i<4;i++){int x=dx[i]+X,y=dy[i]+Y; if(x<0||x>=n||y<0||y>=m||g[x][y]<=g[X][Y]) continue;dist[X][Y]=max(dist[X][Y],dfs(x,y)+1);}return dist[X][Y];}

剑指 Offer II 113. 课程顺序

vector<int> findOrder(int numCourses, vector<vector<int>>& p) {       unordered_map<int,vector<int>> map;int n=p.size();vector<int> d(numCourses);int head=0;int tt=-1,hh=0;for(int i=0;i<n;i++){int aa=p[i][0],bb=p[i][1];d[aa]++;map[bb].push_back(aa);}queue<int> q;vector<int> res;for(int i=0;i<numCourses;i++){if(!d[i]) q.push(i);}while(q.size()){int cc=q.front();q.pop();res.push_back(cc);for(int i=0;i<map[cc].size();i++){int u=map[cc][i];d[u]--;if(!d[u]) q.push(u);}}   if(res.size()<numCourses) return res={};return res;}

剑指 Offer II 114. 外星文字典

 unordered_map<char,string> map;string alienOrder(vector<string>& words) {int cnt=0;int f[26]={0};int d[26]={0};queue<char> q;string res;for(int i=0,j=1;j<words.size();i++,j++){int js=0;for(int k=0;k<min(words[i].size(),words[j].size());k++){if(words[i][k]==words[j][k]) {js++;continue;}char aa=words[i][k],bb=words[j][k];if(map[bb].find(aa)==-1){map[bb].push_back(aa),d[aa-'a']++;break;}break;  }if(js==words[j].size()&&words[i].size()>words[j].size()){cout<<"xx";return "";} }for(int i=0;i<words.size();i++)for(int j=0;j<words[i].size();j++)f[words[i][j]-'a']++;for(int i=0;i<26;i++){if(d[i]==0&&f[i]) q.push(i+'a');} while(q.size()){char cc=q.front();q.pop();res+=cc;for(int i=0;i<map[cc].size();i++){d[map[cc][i]-'a']--;if(!d[map[cc][i]-'a']) q.push(map[cc][i]);}} for(int i=0;i<26;i++) if(f[i]) cnt++;// cout<<res<<endl;// cout<<cnt<<endl;if(res.size()<cnt) return "";reverse(res.begin(),res.end());return res;}

剑指 Offer II 115. 重建序列

 bool sequenceReconstruction(vector<int>& nums, vector<vector<int>>& p) {unordered_map<int,vector<int>> map;vector<int> d(nums.size()+1);for(int i=0;i<p.size();i++){for(int j=0,k=1;k<p[i].size();j++,k++){int aa=p[i][j],bb=p[i][k];map[aa].push_back(bb);d[bb]++;}}int q[10010];int tt=-1,hh=0;for(int i=1;i<=nums.size();i++)if(d[i]==0) q[++tt]=i;int loc=0;while(hh<=tt){if(tt-hh>=1) return false;int cc=q[hh++];if(cc!=nums[loc++]) return false;for(int i=0;i<map[cc].size();i++){int j=map[cc][i];d[j]--;if(!d[j])   q[++tt]=j;}}return true;}

剑指 Offer II 116. 省份数量

int res=0;vector<bool>st;vector<vector<int>> p;int n,m;int findCircleNum(vector<vector<int>>& pp) {p=pp;n=p.size(),m=p[0].size();st=vector<bool>(n);for(int i=0;i<n;i++){if(!st[i]) res++, dfs(i);}return res;}void dfs(int u){st[u]=true;for(int i=0;i<n;i++){if(p[u][i]==1&&u!=i&&!st[i]) dfs(i);}}

剑指 Offer II 117. 相似的字符串

 int n,m;int res;vector<int>p;int find(int u){if(p[u]!=u)  p[u]=find(p[u]);return p[u];}bool check(string  aa,string bb){if(aa==bb) return true;vector<int> q;for(int i=0;i<aa.size();i++){if(aa[i]!=bb[i]) q.push_back(i);}if(q.size()!=2) return false;return aa[q[0]]==bb[q[1]]&&aa[q[1]]==bb[q[0]];} int numSimilarGroups(vector<string>& strs) {int n=strs.size(),m=strs[0].size();res=n;p=vector<int>(n);for(int i=0;i<n;i++) p[i]=i;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(check(strs[i],strs[j])){if(find(i)!=find(j)){p[find(i)]=p[find(j)];res--;}}}}return res;}

剑指 Offer II 118. 多余的边

vector<int> p;int find(int u){if(p[u]!=u) p[u]=find(p[u]);return p[u];}vector<int> findRedundantConnection(vector<vector<int>>& edges) {int n=edges.size();p.resize(n+1);for(int i=1;i<=n;i++) p[i]=i;for(auto e:edges){int aa=find(e[0]) ,bb=find(e[1]);if(aa!=bb) p[aa]=bb;else return  e;}return {};}

剑指 Offer II 119. 最长连续序列

int longestConsecutive(vector<int>& p) {set<int> q(p.begin(),p.end());vector<int> nums(q.begin(),q.end());int n=nums.size();int res=0;for(int i=0,j=0;i<n;i++){//   cout<<i<<endl;int cnt=1;while(i+1<n&&nums[i]+1==nums[i+1]) cnt++,i++;res=max(res,cnt);}return res;}

剑指offer 第二版(101——119)(全部完结)相关推荐

  1. 剑指Offer第二版Java代码实现

    剑指Offer第二版Java代码实现 A.单例模式 面试题 2:实现Singleton模式 B.面试需要的基础知识 面试题 3:数组中重复的数字 面试题 4:二维数组的查找 面试题 5:替换空格 面试 ...

  2. python数据结构与算法刷题——剑指offer第二版加部分leetcode题

    说不清楚,只能看代码理解的用红色标出 查找算法:查找较排序来说较简单,不外乎顺序查找和二分查找.哈希表查找和二叉排序树查找.(很多面试官喜欢让应聘者写出二分查找(如test53)的代码)[注意:二分查 ...

  3. 剑指offer第二版答案详细版(带详细解题思路)

    1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...

  4. 剑指offer第二版(leetcode)Java题解(不断更新)

    1 数组中的重复数字 题目 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一 ...

  5. 剑指offer第二版-9.用两个栈实现队列

    描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...

  6. JAVA实现 剑指offer第二版 2

    面试题16:数值的整数次方 需要考虑底数为0的情况,指数为正或负的情况:在计算次方时,应注意到4次方为2次方的2次方,可以进行递归调用减少复杂度:也要主要到double类型的比较不能直接使用==: p ...

  7. 剑指offer第二版——面试题9(java)

    面试题9:用两个栈实现队列 题目描述:  用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能. ...

  8. 剑指offer第二版(150M超清分享PDF+源码)(转)

    链接:https://pan.baidu.com/s/1b6ZxVIBvjPfKifToh_h26Q 密码:6t76 https://github.com/zhedahht/ChineseCoding ...

  9. 剑指offer最新版_剑指offer第二版速查表

    5.替换空格:python直接替换 6.从尾到头打印链表: 借助栈或直接利用系统调用栈 // 创建链表(设置next节点时就会创建下一个节点), 打印链表(最后打印nil) xxx8.二叉树的下一个节 ...

最新文章

  1. [验证码识别技术]字符验证码杀手--CNN
  2. XCode 4.2(4.1)真机调试及生成IPA全攻略
  3. 74. Search a 2D Matrix (Graph; Divide-and-Conquer)
  4. php 接口说明文档,phpwind文章中心接口说明
  5. datagridview滚动条自动滚动_掘金上摸鱼的新发现,无限滚动(infinitescroll)
  6. OnlineJudge 离线题库采集
  7. [转载]网页栅格系统研究(3):粒度问题
  8. Bootstrap HTML编码规范之属性顺序
  9. Adhesive框架系列文章--报警处理流程使用实践
  10. 线性判别式分析-LDA-Linear Discriminant Analysis
  11. android+创意方案,有创意≠购买欲 - 10款失败的 Android 创意产品
  12. MySQL的主动优化和被动优化_MySQL“被动”性能优化汇总
  13. oracle 拉链表 计算和,Oracle拉链表和流水表如何按照时间匹配求新的计算项
  14. synchronized中重量级锁、偏向锁和轻量级锁的区别
  15. mod sim tcp配置_ModSim32和ModScan32两种Modbus调试工具使用说明
  16. “蔡徐坤微博转发过亿”幕后推手一审获刑五年
  17. 我的编程之路点滴记录(二)
  18. 第九章 亚瑟龙的召唤
  19. uos系统不激活能用吗_uos如何激活
  20. 4g手机关闭4g信号显示无服务器,手机4G信号栏为什么突然出现“HD”?原来开通了这个业务,望周知...

热门文章

  1. DDD(领域驱动设计)系列主题:失血模型,贫血模型,充血模型和胀血模型详细解读和代码案例说明!
  2. 随机数生成方法及其应用
  3. 读《蒙台梭利敏感期早教手册》
  4. python安装sqlite_SQLite 安装
  5. 对计算机系统进行软攻击的方法,计算机软件中安全漏洞检测方法研究
  6. java打印args的内容_解决java main函数中的args数组传值问题
  7. Escaping closure captures non-escaping parameter ‘xx‘
  8. 常见信号质量问题、危害及其解决方法
  9. 尚硅谷谷粒音乐项目学习笔记及答疑解惑(1-20集)
  10. Silverlight中生动的火柴人动画