随笔分类 - 算法笔记
反正才刚开始学算法重要啊,打算先看一看胡凡编写的算法笔记,以写博客的方式督促自身学习并帮助复习。
摘要:我们都知道scanf()是可以输入string类型的: 如: #include <stdio.h> #include <string> #include<iostream> using namespace std; int main() { string a; a.resize(6); //需要预先
阅读全文
摘要:https://www.cnblogs.com/striver-zhu/p/4653675.html
阅读全文
摘要:https://blog.csdn.net/m0_51295053/article/details/121046928?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163575426116780262516650%2522%252C
阅读全文
摘要:count函数可以用来统计字符串中某个字符的个数使用方法是count(begin,end,‘a’),其中begin指的是起始地址,end指的是结束地址,第三个参数指的是需要查找的字符。 #include <bits/stdc++.h> using namespace std; int main()
阅读全文
摘要:声明和初始化方法:想使用string首先要在头文件当中加入< string >声明方式也很简单 声明: string s;//声明一个string 对象 string ss[10];//声明一个string对象的数组 初始化: 使用等号的初始化叫做拷贝初始化,不使用等号的初始化叫做直接初始化 #in
阅读全文
摘要:c与c++中的几种输入和输出的函数,一直都弄不清楚区别,今天查了一下午,终于是清晰了起来。 输入原理简述: 程序的输入都建有一个缓冲区,即输入缓冲区。每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,
阅读全文
摘要:通过下面的学习,读者应能完全不使用指针,而简单使用数组来完成二叉树的所有操作。 在定义二叉树时,采用的是二叉链表的结构,如下所示: struct node{ typename data; //数据域 node* lchild; //指向左子树根结点的指针 node* rchild; //指向右子树根
阅读全文
摘要:归并排序是一种基于“归并”思想的排序方法,本节主要介绍其中最基本的2-路归并排序。2-路归并排序的原理是,将序列两两分组,将序列归并为[n/2]个组,组内单独排序;然后将这些组再两两归并,生成[n/4]个组,组内再单独排序;以此类推,直到只剩下一个组为止,其核心在于如何将两个有序序列合并成一个有序序
阅读全文
摘要:解决一个重要的问题:如果给定一棵二叉树的先序遍历序列和中序遍历序列,重建这棵二叉树。假设已知先序序列为pre1、pre2、…、pren,中序序列为in1、in2、…、inn,如图下图所示。 那么由先序序列的性质可知,先序序列的第一个元素pre1是当前二叉树的根结点。再由中序序列的性质可知,当前二叉树
阅读全文
摘要:二叉树的遍历是指通过一定顺序访问二叉树的所有结点。遍历方法一般有四种:先序遍历、中序遍历、后序遍历及层次遍历,其中,前三种一般使用深度优先搜索(DFS)实现,而层次遍历一般使用广度优先搜索(BFS). 无论是这三种遍历中的哪一种,左子树一定先于右子树遍历,且所谓的“先中后”都是指根结点root在遍历
阅读全文
摘要:题目描述: 给定一个n* m大小的迷宫,其中* 代表不可通过的墙壁,而“.”代表平地,S表示起点,T代表终点。移动过程中,如果当前位置是(x, y)(下标从0开始),且每次只能前往上下左右、(x, y + 1)、(x, y - 1)、(x - 1, y)、(x + 1, y)四个位置的平地,求从起点
阅读全文
摘要:1.树的定义与性质 (1)树(tree)的概念 在数据结构中,树则是用来概括传递关系的一种数据结构。为了简化,数据结构中把树枝分叉处、树叶、树根抽象为结点(node),其中树根抽象为根结点(root),且对一棵树来说最多存在一个根结点;把树叶概括为叶子结点(leaf),且叶子结点不再延伸出新的结点;
阅读全文
摘要:前面介绍了深度优先搜索,可知DFS是以深度作为第一关键词的,即当碰到岔道口时总是先选择其中的一条岔路前进,而不管其他岔路,直到碰到死胡同时才返回岔道口并选择其他岔路。接下来将介绍的广度优先搜索(Breadth FirstSearch,BFS)则是以广度为第一关键词,当碰到岔道口时,总是先依次访问从该
阅读全文
摘要:深度优先搜索会走遍所有路径,并且每次走到死胡同就代表一条完整路径的形成。这就是说,深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法。使用递归可以很好地实现深度优先搜索。当然也可以使用非递归的方法实现DFS,但是非递归的方法一般情况下会比递归的方法要麻烦。在使用递归的时候,系统还会调用一个叫
阅读全文
摘要:栈是一种先进后出的数据结构,以下是其常见操作: (1)清空(clear) 栈的清空操作将栈顶指针TOP置为-1,表示栈中没有元素。 void clear() { TOP = -1; } (2)获取栈内元素个数(size) 由于栈项指针TOP始终指向栈顶元素,而数组下标从0开始、因此栈内元素的数为TO
阅读全文
摘要:不同于动态链表,需要指针来建立节点之间的联系,而有些问题来说,节点的地址是比较小的整数(例如5位数的整数),这样就没必要建立动态链表,而使用方便得多的静态链表。静态链表的实现原理是hash,通过建立一个结构体数组,并令数组的下标直接表示节点的地址,来达到直接访问数组中的元素就能访问节点的结果。静态链
阅读全文
摘要:对sort函数(需要algorithm头文件),它的cmp可以是“函数”,也可以是“对象” bool myfunction (int i,int j) { return (i<j); } struct myclass { bool operator() (int i,int j) { return
阅读全文
摘要:#include<stdio.h> #include<stdlib.h> struct node { int data; node* next; };//定义链表节点 (一)创建链表 node* create(int* Array) { node* p, * head, * pre; int k =
阅读全文
摘要:利用问题的本身与序列的特新,使用两个下标i, j对序列进行扫描(可以同向扫描,也可以反向扫描),以较低的时间复杂度解决问题,一般是O(n) 例1:给定一个递增的正整数序列和一个正整数M,求序列中的两个不同位置的数a和b,使得它们的和恰好为M,输出所有满足条件的方案。加入给定序列{ 1,2,3,4,5
阅读全文
摘要:为降低原来O(b)的时间复杂度,求解a^b%m,现在利用二分的思想,进行求解。a^b=a *a^(b-1) b为奇数ab=a(b/2)*a^(b/2) b为偶数在经过O(ln(b))级别的转换后,就可以将b变成0; 还要必须知道的是 a b…n%m=(a%m)(b%m)…(n%m)%m.另外%,/
阅读全文

浙公网安备 33010602011771号