简单数据结构
终极香蕉大菠萝
学习中
展开
-
LeetCode笔记05:最长公共前缀
https://leetcode.cn/problems/longest-common-prefix/原创 2022-09-28 14:30:16 · 470 阅读 · 0 评论 -
LeetCode笔记04:对角线遍历
给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。原创 2022-09-27 22:40:02 · 573 阅读 · 0 评论 -
LeetCode笔记03:零矩阵
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。原创 2022-09-27 10:16:43 · 134 阅读 · 0 评论 -
kmp算法
KMP算法S[0]为B,P[0]为A,不匹配,执行第②条指令:“如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0”,S[1]跟P[0]匹配,相当于模式串要往右移动一位(i=1,j=0)S[1]跟P[0]还是不匹配,继续执行第②条指令:“如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0”,S[2]跟P[0]匹配(i...原创 2019-08-31 19:11:15 · 695 阅读 · 0 评论 -
单链表的逆转
链表的部分逆转。#include<iostream>using namespace std;struct list{ int num; list *next;};list* createlist(int k){ list* head = (list*)malloc(sizeof(list)); list* temp = head; cin >> h...原创 2019-05-27 22:07:29 · 156 阅读 · 0 评论 -
判断一棵树是否是平衡二叉树
struct TreeNode{ TreeNode *leftChild; TreeNode *rightChild; int data; }; int getHeight(const TreeNode* root){ if( root == nullptr){ return 0; } ...转载 2019-05-27 21:01:02 · 723 阅读 · 0 评论 -
数据结构之动态规划
动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题...原创 2019-05-18 17:45:27 · 657 阅读 · 0 评论 -
递归实现全排列 -----学习记录
自我学习#include <iostream>using namespace std;void swap(int &a,int &b){ int temp=a; a=b; b=temp;}void perm(int list[],int low,int high){ if(low==high){ //当low==high时,...转载 2019-05-27 12:11:47 · 183 阅读 · 0 评论 -
简单并查集 树的简单应用 hdu1232
并查集,是利用树的思想题目:某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?输入帮助:测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行...原创 2019-05-25 18:06:09 · 107 阅读 · 0 评论 -
二分查找 递归实现
#include <iostream>#include<iomanip>using namespace std;int find(int left, int right, int a[],int k){ int mid = (left + right) / 2; if (left <= right) { if (k > a[mid]) {...原创 2019-05-25 14:51:44 · 5166 阅读 · 1 评论 -
01背包 动态规划
利用动态规划原理,把递归对此重复运算的值,利用二维数组去储存int a[x][y];x代表商品的编号,y代表 最大容纳量。利用数组的遍历,不断地去更新二维数组的选择最大值取决于选于不选。#include <iostream>#include<iomanip>using namespace std;int max(int a, int b){ return ...原创 2019-05-20 22:45:41 · 114 阅读 · 0 评论 -
01背包 (递归解决)
01背包,设定一个背包,他有一个maxweight,现在你有n个物品,每个物品都有重量与其价值,现在要你求取得的最大价值。运用递归的思想,假如现在是从最后一个开始选,如果这个东西的重量大于背包的重量,那是不是可以从第n-1个物体开始选。假如这个东西的重量小于背包的重量,那么现在你将面临两个选择,一不选,那么你就跳过了这个物品,就可以从n-1开始选。 二,选,假如你选了的话,那么背包的重量就减少...原创 2019-05-20 19:44:57 · 3435 阅读 · 0 评论 -
十字链表——理解 通过链表储存二位数组
十字链表用通过两个结构体进行储存,第一个结构体储存 x,y坐标与记录值。第二个结构体则存储行的头链表与列的头链表,还有关于开辟链表的大小,x,y,z,z为非零值的个数。然后通过一个函数去实现链表的开辟,实现十字链表。链表的两个表头为第一个结构体的指针的指针,即其指针指向第一个结构体的指针,利用第一个结构体的指针实现输入功能。动态建立指针数组的方式如下p = (OLink )malloc(...原创 2019-05-19 21:59:10 · 715 阅读 · 0 评论 -
简单归并排序————数组的归并 理解归并的原理
归并排序的原理是归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并操作的工作原理如下:第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序...原创 2019-05-19 14:54:32 · 838 阅读 · 0 评论 -
最大子序列和 分而治之
分而治之求 一个数列最大连续子数列和。原理利用递归的思想,将数列不断地分成两半,分到最小时为一个数。返回一个初值,然后再判断4,-3,4+(-3),哪个大,在返回4,再判断5与-2,返回5,再判断4与,依次类推。下面是代码#include<iostream>using namespace std;int crossmax(int *a, int left, int righ...原创 2019-05-19 13:53:53 · 705 阅读 · 2 评论