![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
asdasdasdasasd1111
这个作者很懒,什么都没留下…
展开
-
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
n&(n-1)的妙用原创 2017-03-09 10:55:03 · 424 阅读 · 0 评论 -
旋转矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作例如 1 2 34 5 67 8 9输出并删除第一行后,再进...原创 2018-07-18 10:24:40 · 813 阅读 · 0 评论 -
二叉排序树转双向链表
找到左子树的最右边节点,需要和后边节点连接起来找到右子树的最左边节点,需要和前边节点连接起来 //二叉树转换成双向链表 public void InvertToLinkedlist(Node head ){ if(head.left!=null){ InvertToLinkedlist(head.left); ...原创 2018-07-05 20:49:10 · 268 阅读 · 0 评论 -
从一个数据流中取出中位数
用两个堆来实现,堆中元素个数相差<=1,class Solution { priority_queue<int, vector<int>, less<int> > p; //大顶堆(存的是一堆小元素) priority_queue<int, vector<int>, g...原创 2018-07-18 15:12:53 · 402 阅读 · 0 评论 -
字符串的最长不重复字串
int longestSubstring(string A, int n) { map<char, int> m; //表示字符串中每个字符是否出现,初始化为0,表示未出现 int start = 1,MAX = 0; //遍历该字符串,每遍历一个字母时,利用map去找该字母最近一次出现是什么时候 //中间这一段便是无重复字...原创 2018-07-12 15:01:57 · 423 阅读 · 0 评论 -
Minimum Window Substring 最小覆盖子串算法
转载:https://blog.csdn.net/fly_yr/article/details/51134340题目 最小子串覆盖给定一个字符串source和一个目标字符串target,在字符串source中找到包括所有目标字符串字母的子串。 注意事项如果在source中没有这样的子串,返回"",如果有多个这样的子串,返回长度最小的子串。说明在答案的子串中的字母在目标字符串中是否需要具有相同的顺序...转载 2018-07-12 17:05:36 · 163 阅读 · 0 评论 -
字符串的全排列
abc的全排列,先用第一个和后面每个交换,再用第二个和后面交换。参考:https://www.cnblogs.com/bakari/archive/2012/08/02/2620826.html转载 2018-07-18 20:58:09 · 166 阅读 · 0 评论 -
一个数的二进制中有多少个1
int bit(unsigned int x){ int c = 0; while( x ) { c++; x = (x & (x - 1)); } return c;}原创 2018-07-07 14:03:06 · 560 阅读 · 0 评论 -
数组中最大连续子数组和,最大连续子数组积,最大递增子序列
对数组a, 递推式:curmax=max(a[i],lastmax) 其中lastmax是以i为结尾的最大值,其中每次循环比较curmax和已经保存最大值int maxhe(vector<int>& a){ lastmax=a[0]; result=a[0]; for(int i=1;i<a.size();++i){ curma...原创 2018-07-14 16:43:52 · 517 阅读 · 0 评论 -
已知先序和中序得出后序
已知前序和中序,求后序遍历:前序:ABDECFG 中序:DBEAFCG思路简单:前序的第一个节点就是根节点, 中序中找到根节点的位置,根节点之前是其左子树,之后是右子树 按此顺序,依次在左子树部分遍历,右子树部分遍历总结性的说:前序负责构建树的节点,中序负责划分左子树和右子树,如果不存在,就是左子树,则表示左节点为空。超级简单的python代码如下:...原创 2018-07-15 13:19:44 · 487 阅读 · 0 评论 -
0-1背包问题
转载:https://blog.csdn.net/m0_37830950/article/details/7024066101背包问题容量为10的背包,有5种物品,每种物品只有一个,其重量分别为5,4,3,2,1,其价值分别为1,2,3,4,5。 设计算法,实现背包内物品价值最大。 代码如下(输出14)#include <iostream>#include<a...转载 2018-07-23 16:44:56 · 183 阅读 · 0 评论 -
二叉树的公共祖先(递归)
1,方法一,求出根节点到目标节点的路径,然后两条路径找到最近公共祖先2,方法二,递归的去找两个节点,找到后,返回root,后序遍历的思想:class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if (!root) return ...原创 2018-07-11 10:26:08 · 656 阅读 · 0 评论 -
合唱团算法(DP问题)
题目:有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?类似于前面写到的LSI最长递增子序列, 只不过这里控制了选取K个,所以这里定义了一个最大数据结构fm[i][j] 其中表示选取了i+1个学生,以j结束(选取了j为结尾)最大值 这里数组...原创 2018-07-03 21:49:05 · 298 阅读 · 0 评论 -
word break II 对字符串根据已知字典 分解出所有可能组合
采用暴力法(brute force 简称BF,普通模式匹配): 代码如下: public class Solution { public List<string> wordBreak(String s, Set<string> dict) { List<string> rsList = new ArrayList<st...原创 2018-06-21 10:53:18 · 161 阅读 · 0 评论 -
word-break 对一个字符串根据给出的字典判断是否可以根据字典切分(DP问题)
思路:定义labels[i]表示前i个字符可以拆分成字典中的词,很显然有 labels[i]=1 if labels[j] && s[j+1,i] in dict else 0 其中(0<j<=i) bool fun(String s,unordered_set<string> &dict){ bool ...原创 2018-06-21 17:20:11 · 343 阅读 · 0 评论 -
LSI最长递增子序列(DP问题)
子问题:序列a,L[i]表示前i个字符的最大递增子序列的长度 对L[i+1],遍历前i个:a[0],,,a[i-1],max{L[i],L[j]+1} if a[j]<a[i]) 0<=j<i 简单的python L[i+1]=max(L[i]+[L[j]+1 for j in range(i) if ...原创 2018-06-21 21:12:44 · 167 阅读 · 0 评论 -
LCS-最大公共子序列(DP问题)
对两个字符串求最大公共子序列,子序列意味着不是连续的序列。 子问题:LCS(s1,s2)表示最大公共子序列 首先基于一个判断, 1)s1和s2有相同的结尾x,那么x一定在最大公共子序列中, LCS(s1,s2)=LCS(s1[:-1],s2[:-1])+1 2)s1和s2没有相同结尾,那么LCS(s1,s2)=max{ LCS(s1[:-1],s2),...原创 2018-06-21 22:12:16 · 156 阅读 · 0 评论 -
在nlog(n)时间里对单链表排序
两个思路: 快速排序(逻辑是自顶向下)。先划分排序(一次确定一个位置),再对左边右边分别排序,一直到最小粒度; 归并排序(逻辑自下而上) 先一直到最小粒度,然后两两合并排序,最合合成排序好的链表;1,快速排序 1)根据划分位置将链表 分成两部分(左边小于,右边大于),递归:QuickSort(head,end),时间复杂度logn void ...原创 2018-06-23 18:08:30 · 407 阅读 · 1 评论 -
leetcode-卡车加气走环
解析: a1 a2 a3 a4 a5 a6 如果a1到a3总的加气-用气<0,那么a1,a2都不能用作起点,a3作为起点//复杂度O(n)class Solution {public: int canCompleteCircuit(vector<int> &gas, vector<int> &cost) { //tota...原创 2018-07-03 10:40:22 · 201 阅读 · 1 评论 -
一个数组分成两部分,让两部分的差最小
题目意思差最小,就是其中一部分最接近sum/2,另外一部分也就最接近sum/2a[i][j] 表示前i件物品和j最接近的累加值a[i][j]=max(a[i-1][j],a[i-1][j-vec[i]]+vec[i])一部分:min(a[:][sum/2]) 另外一部分:sum-min(a[:][sum/2])...原创 2018-07-10 01:37:42 · 4015 阅读 · 0 评论 -
怎么判断两颗二叉树相等
bool pd(st *p, st *q){ if(p==NULL && q==NULL) return true; else if(p==NULL || q==NULL) return false; else return p->data==q->data && pd(p->l,q->l) && pd(p-...原创 2018-07-03 17:30:53 · 347 阅读 · 0 评论 -
信息学奥赛一本通 题解目录
刷题 很全的知识体系转载:https://blog.csdn.net/u011815404/article/details/79324003第一部分 C++语言第一章 C++语言入门 T1001 Hello,World! 点击这里 T1002 输出第二个整数 点击这里 T1003 对齐输出 点击这里 T1004 字符三角形 点击这里 T...原创 2018-07-03 21:27:00 · 132867 阅读 · 6 评论 -
牛顿迭代法求平方根
求x的平方根,初始化一个值t,允许误差errorx=1234t=xerror=0.01while (t*t-x)>error: t=(x/t+t)/2.0(牛顿迭代法)print t原创 2018-08-02 09:17:09 · 428 阅读 · 0 评论