随笔分类 - 算法
汇集一些常见的算法面试题,涉及到数据结构和数学等
摘要:分析和思路:循环处理字符串,并更新处理后的字符串 1 // ParameterParse.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 2 // 3 4 #include <iostream> 5 6 #include "iostream" 7 #include <sst
阅读全文
摘要:1 #include <iostream> 2 3 using namespace std; 4 5 int num[9][9];//用于保存9x9盘面 6 bool flag = false;//flag为true时表示推算完成,结束递归 7 8 bool check(int n){//判断当前位
阅读全文
摘要:分析和思路:直接位运算即可 1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 long long int a,b,c,d; 7 long long int num; 8 9 while(scanf("%lld.%lld
阅读全文
摘要:分析和思路:把输入的字符串反转后,求最大的公共子串,同时判断是不是回文 1 #include "iostream" 2 #include "string" 3 #include "algorithm" 4 #include "vector" 5 using namespace std; 6 7 8
阅读全文
摘要:分析和思路:其实就是找到从最左边开始以当前最右边节点结尾的最长递增子序列。注意,最长的子序列不一定包含最后一个节点。这是一个动态规划题。 1 #include "iostream" 2 #include "algorithm" 3 using namespace std; 4 5 6 //解题思路:
阅读全文
摘要:分析和思路:先插入节点,然后再打印剩余节点值即可 1 //解题思路: 2 //创建链表后,通过不重复的节点,遍历链表,找到待插入的值后,将链表插进去即可。 3 #include "iostream" 4 using namespace std; 5 struct ListNode 6 { 7 int
阅读全文
摘要:分析和思路:建立矩阵和输入字符的映射关系后,对表达式进行计算 1 // MatrixCalculate.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "string" 5 #include "map" 6 #include "iostream" 7 using nam
阅读全文
摘要:分析和思路:用一个新的字符串保存源字符串非数字的数字,在遇到数字时,进行处理 1 #if 1 2 #include "iostream" 3 #include "string" 4 using namespace std; 5 int main() 6 { 7 string temp; 8 whil
阅读全文
摘要:分析和思路: 接受输入数据后,从1开始遍历,找到连续相加和的连续奇数即可。back变量的设置有些技巧。 1 #include <iostream> 2 #include "iostream" 3 #include "string" 4 5 using namespace std; 6 7 int m
阅读全文
摘要:分析和思路: 双重循环判断字符是否相等,相等即进入循环,注意退出循环后,要把索引回退到新的位置 1 #include "iostream" 2 #include "string" 3 4 using namespace std; 5 6 7 8 9 10 int main() 11 { 12 13
阅读全文
摘要:分析和思路:对一个整数进行分解,求出各位数值,判断是不是7即可 1 #include "iostream" 2 3 using namespace std; 4 5 bool getSevenCount(int input_number) 6 { 7 int temp=input_number; 8
阅读全文
摘要:分析和思路:遍历数字的每一位,遇到1的时候,进入while循环,用一个变量保存最大值,并更新 1 #include <iostream> 2 #include "iostream" 3 4 using namespace std; 5 6 int main() 7 { 8 int number =
阅读全文
摘要:分析和思路:直接按照题意,对字符进行映射。 注意字符和整数之间的转换 char-'0'=整数 整数+‘0’=字符 1 #include "iostream" 2 3 #include "string" 4 5 using namespace std; 6 7 int main() 8 { 9 10
阅读全文
摘要:分析和思路: 先求出每个元素的最长的递增队列,再求每个元素最长的递减队列,再把每个元素的最长的递增和递减加一起最大值就是所需要求的值。记得是逆向覆盖。 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 //https:/
阅读全文
摘要:1 #include<iostream> 2 #include<vector> 3 #include<math.h> 4 using namespace std; 5 vector<int> elsevec; 6 int n,m,sum3,sum5,dis0; 7 bool f(int i,int
阅读全文
摘要:分析和思路: 建立一个hash的表达式,如果那个重量能够称出来,就给它赋值1.然后把所有的砝码的重量进行累加,出现新的重量就赋值1,重复的也赋值1,在遍历整个v[i]=1的个数,就是能够称出的重量总数。 需要考虑一个问题,如何将已有的砝码总量都进行累加?如果有多少组,就需要列几个循环吗?10个组10
阅读全文
摘要:分析和思路:把附件1和附件2输入后,然后用“只买主件“、“ 只买主件+附件1“ ,“ 只买主件+附件2“、 “ 买主件+附件1+附件2“ ,实际归为了新的产品种类。然后建立状态转移方程即可。详细代码如下: //在状态转移时如何判断这个主件有几个附件?答案是不需要判断,直接用 if(j>=zj[i])
阅读全文
摘要:分析和思路: 1,首先栈的有一个元素 2,栈有了元素后就需要和pop里的元素去做对比,栈顶的元素和当前的pop队列第一个元素相等,就出栈,否则就不停的压栈。循环判断用的是pop和push的索引是否到了它们的最大值。 3,判断栈是否为空,如果为空就为真,否则为假。 1 bool IsPopOrder(
阅读全文
摘要:分析和思路:使用map保存每个节点的个数,大于1的个数链表不创建,其他的重新创建,这个方法的缺点是用了o(n)的空间。 1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x),
阅读全文
摘要:分析和思路: 把成绩保存到map或者vector中,然后进行排序。这道题关键是处理那个成绩相等时,排序后依然保持相对顺序不变的问题,费了好大的心思,发现效果依然不是自己想要的,写出的代码如下: 1 #include "iostream" 2 #include <vector> 3 #include
阅读全文

浙公网安备 33010602011771号