数据结构与算法笔记
数据结构与算法笔记
roy_blue
算法工程师,希望和大家共同提高,欢迎关注,关注必回
展开
-
【数据结构】--2.排序算法
常见的排序算法 :冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序https://www.cnblogs.com/eniac12/p/5329396.html#include<iostream>using namespace std;void Swap(int A[],int i,int j){ int temp=A[j]; A[j]=A[i]; A...原创 2018-10-30 22:08:39 · 97 阅读 · 0 评论 -
【一周编程学习】--数组与链表
1.实现一个动态扩容的数组#ifndef __ARRAY_H__#define __ARRAY_H__using namespace std;const int initialLen = 10;template <class T>class Array{public: Array(int len = initialLen){ T *p = new T[len...原创 2019-02-28 21:30:33 · 100 阅读 · 0 评论 -
【算法学习】--动态规划--求最长子序列
对于母串X=<x1,x2,⋯,xm>, Y=<y1,y2,⋯,yn>,求LCS与最长公共子串。子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串cnblogs belong比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与母串保持一致,我们将其称为公共子序列。最长公共子序列(Longest Common S...原创 2019-01-28 22:37:52 · 502 阅读 · 0 评论 -
快速排序QuickSort学习
一、基本思想:分割(partition) 用一个数将所有其他数值分成左右两部分,使得左边的数小于等于此数,右边的数都大于等于此数。在寻找的过程中要交换两个数的位置。时间复杂度为O(NlogN),是一种不稳定的排序算法。二、C++实现代码:void QuickSort(int a[],int left,int right){ if(left>right) return...原创 2019-01-23 17:14:02 · 232 阅读 · 0 评论 -
【算法学习】--贪心、动态规划、分治的区别与应用
相同点:将问题划分为一个个子问题,然后通过解决这些子问题来解决最终问题。1.分治算法:分解(Divide):将原问题分解成一系列子问题; 解决(conquer):递归地解各个子问题。若子问题足够小,则直接求解; 合并(Combine):将子问题的结果合并成原问题的解应用:归并排序;2.贪心算法:贪心算法中,是以自顶向下的方式使用最优子结构的。贪心算法会先做选择,在当时看起来是最优...原创 2019-01-28 12:26:14 · 624 阅读 · 0 评论 -
【一周编程学习】--7.DP动态规划 0-1背包问题
1.01背包问题0-1 背包问题:给定 n 种物品和一个容量为 V的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?首先回顾动态规划的内容,DP与分治区别在于划分的子问题是有重叠的,解过程中对于重叠的部分只要求解一次,记录下结果,其他子问题直接使用即可,减少了重复计算过程。最优子结构性质:最优解包含了其子问题的最优解...原创 2019-01-09 21:45:24 · 624 阅读 · 0 评论 -
【一周编程学习】--6.递归LeetCode第17题、46题
1.LeetCode第17题题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。解题思路:这是一个字母排列问题,先将输入的数字替换成对应的字母。从输入数字的第一个数字开始,将每一种可能的结果添加到结果中,递归终止的条件是当组合字母的索引等于输入数字的长度时。findCombination(...原创 2019-01-08 19:14:11 · 155 阅读 · 0 评论 -
【一周编程学习】--5.递归与动态规划学习笔记
1.递归1.1 递归,简单点来说,就是一个函数直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。 我们可以把” 递归 “比喻成 “查字典 “,当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词。可惜,第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到...原创 2019-01-07 21:18:13 · 145 阅读 · 0 评论 -
【一周编程学习】--4.二叉树的学习笔记--LeetCode第98题、102题、107题
1.二叉树的相关知识点二叉树具有五种基本形态:空二叉树。 只有一个根结点。 根结点只有左子树。 根结点只有右子树。 根结点既有左子树又有右子树以二叉链表作为二叉树存储结构:data是数据域,lchild指向左孩子的指针域,rchild指向右孩子的指针域 typedef struct BinTreeNode{ char data; str...原创 2019-01-06 20:13:22 · 1057 阅读 · 2 评论 -
【一周编程学习】--2.链表--leetcode206、142题
1.单链表知识小结构成:头指针(Header),若干个节点(节点包括了数据域和指针域),最后一个节点要指向空。单链表的基本操作初始化:typedef int ElemType;typedef struct Node{ElemType data;struct Node* next;}Node;typedef struct Node* LinkList;voi...原创 2019-01-04 20:13:04 · 214 阅读 · 0 评论 -
【一周编程学习】--1.用哈希思想实现--LeetCode的第1题和第202题
1.LeetCode第一题 两数之和以一个数为基准,再用目标数减去基准数得到他们的差值,再在数组中找这个差值。这个时候以数组存放的数值为key值,数值对应的数组下标为value值。利用哈希查找算法查找相应值的下标。分别用C++和Pyhton做的:vector<int> twoSum(vector<int> nums,int target){ un...原创 2019-01-03 21:24:24 · 369 阅读 · 2 评论 -
【一周编程学习】--3.队列与堆的学习-LeetCode第239题
1.队列与堆学习笔记队列的存储结构:是一种先进先出的线性表,只允许在一端插入数据(队尾),在另一端进行删除操作(队头)头指针 front 和 尾指针 rearFront(队头):从队列中获得最前面的元素。Rear(队尾):从队列中获得最后面的元素。队列的操作Enqueue(入队/插入):添加元素到队列中。如果队列满了,则表示溢出(Overflow)情况。De...原创 2019-01-05 20:38:37 · 156 阅读 · 0 评论 -
【数据结构】--1.链表的基本操作和哈希表定义
C实现链表的基本操作初始化 插入 删除 哈希表的定义 //链表的基本操作 初始化 插入 删除 哈希表的定义#include<iostream>using namespace std;typedef struct Node{ int data; struct Node*next;}Node,*LinkList,LinkList1;typedef str...原创 2018-09-28 22:01:20 · 236 阅读 · 0 评论 -
【代码大全】 读书笔记
文章目录第七章 高质量的子程序1.创建子程序的理由2.内聚性3.好的子程序名字4.子程序的参数5.使用函数时要注意的问题第八章 防御式编程1.保护程序免遭非法输入数据的破坏2.断言 assertions3.错误代码的处理4.异常的处理 exception5.各种错误的处理机制:第十章 使用代码的一般事项变量初始化原则作用域 : 使变量引用局部化第十一章 变量名的力量1.注意事项2.变量的...原创 2019-09-06 17:31:54 · 699 阅读 · 0 评论