数据结构与算法
lx127372
数字图像处理
展开
-
leetcode刷题笔记——分治
leetcode 241这个题改了几次也看了题解,重点复习/*给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。示例 1:输入: "2-1-1"输出: [0, 2]解释:((2-1)-1) = 0(2-(1-1)) = 2*//*分治 以符号分成左右两边 然后分别对左右两边递归*/#include<iostream>#include<strin原创 2020-07-07 09:49:25 · 230 阅读 · 0 评论 -
leetcode刷题笔记-树2
leetcode 101:/*给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/symmetric-t原创 2020-06-21 14:52:52 · 184 阅读 · 0 评论 -
leetcode刷题笔记-树1
方便之后复习,记录一下leetcode上有关于树的几道题先是树的前序遍历、中序遍历、和后序遍历分别是leetcode上144、94、145前序遍历就是先根结点 – 左子树 – 右子树中序遍历就是左子树 – 根结点 – 右子树后序遍历就是左子树 – 右子树 --根结点代码:递归方法 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), le原创 2020-06-13 10:03:49 · 245 阅读 · 0 评论 -
Leetcode刷题笔记-滑动窗口
记录一下在leetcode上刷的滑动窗口的几道题,方便后边复习。解析都放在代码里注释。leetcode 15:/*给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum*//*用排序加双指针,这个题主要是去重*/#inc原创 2020-05-31 16:49:14 · 333 阅读 · 0 评论 -
ALL in ALl
最近一直没怎么上博客,今天就写到题吧。题目描述:给定两个字符串s和t,请判断s是否是t的子序列。即从t中删除一些字符,将剩余的字符连接起来,即可获得s。输入描述:包括若干组测试数据。每组测试数据由两个ASCII码的数字和字母串s和t组成, s和t的长度不超过100000。输出描述:对每组测试数据,如果s是t的子序列则输出Yes;,否则输出No。样例输入:sequence subse...原创 2019-03-12 23:25:03 · 517 阅读 · 0 评论 -
堆排序和归并排序笔记
堆排序堆排序是对选择排序的改进 时间复杂度是 O(nlogn),大概思路是:将待排序的数列构造成大顶堆或者小顶堆 大顶堆就是每个结点的值大于左右孩子的值此时,整个数列的最大值就是堆顶的根节点(将其与末尾交换)然后将剩余的n-1个序列重新构造成一个堆反复进行上代码:/* =======================================================...原创 2019-02-09 22:30:48 · 650 阅读 · 0 评论 -
简单排序算法
记一下学习的三种简单排序算法冒泡排序冒泡排序也算是最经典的了,也是比较简单的,就是将相邻的两个相比较,直接上代码吧:#include<stdio.h>void bubblesort(int a[],int n){ int i,j,temp,count1=0,count2=0,flag; flag=1; for(i=0;i<n-1&&flag;...原创 2019-02-07 21:38:38 · 245 阅读 · 0 评论 -
二叉排序树学习笔记
二叉排序树的定义:左子树不为空时,则左子树上所有结点的值都小于它的根结点的值右子树不为空时,则右子树上所有结点的值都大于它的根结点的值它的左右字数也分别为二叉排序树(递归)代码:#include<stdio.h>#include<stdlib.h>typedef struct BiTNode{ int data; struct BiTNode *l...原创 2019-02-03 23:13:41 · 157 阅读 · 0 评论 -
折半查找,插值查找和斐波那契查找
学习折半查找,插值查找和斐波那契查找笔记折半查找,插值查找和斐波那契查找的前提都是要查找的数据进行了排序,他们的思想都是差不多的,只不过是mid的值不一样。折半查找就是先查找中间的数,如果中间的数是要查找的值,那么就直接返回,否则比较中间的值与low和high的值的大小然后改变low或者high,继续查找。就直接上代码吧#include<stdio.h>#include<...原创 2019-01-22 23:37:29 · 315 阅读 · 0 评论 -
最小生成树Prim笔记
计算最小生成树的一种方法就是使其连续的一步一步的长成。在每一步都要把一个结点当做根来往上加边。在算法的任一时刻都可以看到一组已经添加到树上的顶点,而其余顶点尚未加到这棵树上。就找尚未加到这个树上的顶点到已经加到树上的顶点的最小的权值。以v1作为起始点,这时v4与v1的权值最小,那么就把v1和v4连上;然后在其他没有被连在树上的顶点中找到了v2里v1权值是2,v3离v4权值是2,这两个最小,那...原创 2019-01-18 15:58:31 · 140 阅读 · 0 评论 -
图的邻接表创建及深度优先遍历和广度优先遍历
最近在学图,写个笔记。图的创建一般有邻接矩阵和邻接表两种方法,邻接矩阵对于边数相对于顶点较少的图会有极大的浪费,所以用邻接表,用数组与链表相配合顶点用一维数组储存所有顶点的邻接点构成一个线性表,因为邻接点的个数不确定,所以用单链表图的深度优先搜索是对先序遍历的推广 一个递归的过程,沿着一个方向遍历,一直到最后,然后再回来到另一个结点沿着一个方向。广度优先遍历就是一层一层的遍历。如上图...原创 2019-01-17 20:09:36 · 26164 阅读 · 5 评论 -
建立单链表并找到中间数
题目:建立单链表并找到中间数普通方法就是先遍历一遍链表知道了单链表的长度N,然后再从头找到N/2时候的数。这种方法时间复杂度为O(N+N/2)=O(3N/2)。在优化一下这个方法,可以利用快慢指针,也就是设置两个指针,然后快的一次移动两个,慢的一次移动一个位置。总体代码(C语言):#include<stdio.h>#include<stdlib.h>#includ...原创 2019-01-02 11:49:28 · 486 阅读 · 0 评论 -
逆波兰计算器
举一个逆波兰表达式的例子吧:(2+3)(4-6)变成逆波兰表达式就是 2 3 + 4 6 - *一开始数字入栈然后遇到加号,将2和3出栈相加的结果在入栈变成再把4和6入栈遇见减号再把4和6弹出,把4-6结果在入栈,然后遇见乘号 就用5(-2)就是结果了代码:#include<stdio.h>#include<stdlib.h>#include<m...原创 2019-01-05 23:24:07 · 578 阅读 · 0 评论 -
用栈把二进制转化为10进制
利用栈后进先出的性质写一个小程序,把二进制转化为10进制例如二进制10001先进栈,然后再转化为10进制代码:#include<stdio.h>#include<stdlib.h>#include<math.h>#define STACK_INIT_SIZE 20#define STACK 10typedef char ElemType;typ...原创 2019-01-05 19:11:37 · 522 阅读 · 0 评论 -
最大子序列和问题的四种求解以及他们的时间复杂度
最大子序列求和的问题就是对于给定的整数数列(里面可能有负数)A1,A2,…AN,求Ai到Ak的和的最大值。例如 -2,11,-4,13,-5,-2 这个数列的最大子序列和就是11-4+13=20。下面用四种方法实现这个功能。时间复杂度依次减小。用三个for循环public class MaxSubSum { public static void main(String[] a...原创 2018-12-28 17:23:31 · 1488 阅读 · 0 评论 -
递归题
用递归计算n个人中选择k个人组成一个委员会的不同组成。 分析: 由n个人里面挑选k个人的组合数=有n-1个人里面选k个人+由n-1个人里选k-1个组合数。 递归推到当n=k或者k=0时结束,因为当n=k或者k=0的时候只有一种组合数。 代码:# include <iostream>using namespace std;int comm(int n,int k){...原创 2018-08-21 00:09:17 · 205 阅读 · 0 评论 -
查找树ADT---二叉查找树
**二叉树**:是一棵树,其中每个节点都不能多于两个儿子。二叉树的一个性质是一颗平均二叉树的深度要比节点个数N小的多。分析表明,其平均深度为O(√N),而对于特殊类型的二叉树,即**二叉查找树**。其深度的平均值为O(logN)。使二叉树成为二插查找树的性质是,对于树中的每个节点X,它的左子树所有的项值小于X中的项,而它的右子树中所有的项的值大于X。二叉查找树要求所有的项都能够排序,要写一个...原创 2018-08-09 20:55:51 · 247 阅读 · 0 评论 -
递归
数据结构与算法分析笔记什么是递归当一个函数用它自己来定义时就称为递归(recursive)但重要的是,Java提供的仅仅是遵循递归思想的一种尝试。不是所有的数学递归函数都能被有效的由Java的递归模拟来实现。 当编写递归例程时要牢记递归的四条基本法则基准情形 必须总要有某些基准情形,它无需递归就能解出。不断推进 对于那些需要递归求解的情形,每一次递归调用都必须要使状况朝向一种...原创 2018-07-05 22:01:41 · 261 阅读 · 0 评论 -
两道课后题
/* * 编写一个程序表示出数N二进制中1的个数 * */public class Recurison { public int calculate(int b){ if(b&amp;lt;2){ return b; }else { return b%2+calculate(b/2);...原创 2018-07-08 18:08:13 · 151 阅读 · 0 评论