数据结构和算法、刷题
Leetcode、C++
Sherry_wang168
这个作者很懒,什么都没留下…
展开
-
112 二叉树路径总和
112 二叉树路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1返回 true, 因为存在目标和为原创 2020-05-17 16:40:10 · 272 阅读 · 1 评论 -
101 对称二叉树(BFS/DFS C++ )
101 对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3思路 - 递归(DFS)需要两个指针来镜像比较。一个指针root1在左子树,另一个指针root2在右子树;比较root1->left == root2->right 和 root1->right == root2->left,也就是镜像比较。时间复杂度:O(n)/** * Def原创 2020-05-17 16:39:36 · 292 阅读 · 0 评论 -
二叉树的最大/最小深度(C++ leetcode104.11)
104. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。解法1:递归 - 深度优先搜索(DFS)/** * Definition for a binary tree node. * struct TreeNode { *原创 2020-05-16 21:51:35 · 750 阅读 · 0 评论 -
二叉树的前序、中序、后序遍历(递归)和 层序遍历(C++实现)
1. 二叉树的前序遍历根 左 右因为先访问根节点,所以直接将root的val放入答案(ans)容器内。然后遍历左子树,现在以root的左子树为root进入递归。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL),原创 2020-05-15 20:38:31 · 670 阅读 · 0 评论 -
二叉搜索树
二叉搜索树二叉搜索树是二叉树的一种特殊形式。 二叉搜索树具有以下性质:每个节点中的值必须大于(或等于)其左侧子树中的任何值,但小于(或等于)其右侧子树中的任何值。二叉搜索树的定义二叉搜索树(BST)是二叉树的一种特殊表示形式,它满足如下特性:每个节点中的值必须大于(或等于)存储在其左侧子树中的任何值。每个节点中的值必须小于(或等于)存储在其右子树中的任何值。下面是一个二叉搜索树的例子:这篇文章之后,我们提供了一个习题来让你验证一个树是否是二叉搜索树。 你可以运用我们上述提到的性质来判断原创 2020-05-15 15:59:25 · 605 阅读 · 0 评论 -
探索二叉树
探索二叉树树 是一种经常用到的数据结构,用来模拟具有树状结构性质的数据集合。树里的每一个节点有一个根植和一个包含所有子节点的列表。从图的观点来看,树也可视为一个拥有N 个节点和N-1 条边的一个有向无环图。二叉树是一种更为典型的树树状结构。如它名字所描述的那样,二叉树是每个节点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”。前序遍历前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。请看下面的例子:中序遍历中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树。后序原创 2020-05-15 11:36:07 · 329 阅读 · 0 评论 -
哈希表——hashset / hashmap
哈希表哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。有两种不同类型的哈希表:哈希集合和哈希映射。哈希集合是集合数据结构的实现之一,用于存储非重复值。哈希映射是映射 数据结构的实现之一,用于存储(key, value)键值对。在标准模板库的帮助下,哈希表是易于使用的。大多数常见语言(如Java,C ++ 和 Python)都支持哈希集合和哈希映射。通过选择合适的哈希函数,哈希表可以在插入和搜索方面实现出色的性能。哈希表的原理正如我们在介绍中提到的,哈希表是一种数据结构,原创 2020-05-13 00:02:34 · 1310 阅读 · 0 评论 -
单链表和双链表
链表与数组相似,链表也是一种线性数据结构。这里有一个例子:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起。链表有两种类型:单链表和双链表。上面给出的例子是一个单链表,这里有一个双链表的例子:一 简介 - 单链表单链表中的每个结点不仅包含值,还包含链接到下一个结点的引用字段。通过这种方式,单链表将所有结点按顺序组织起来。1. 结点结构在大多数...原创 2020-05-04 11:33:26 · 648 阅读 · 0 评论 -
数组和字符串简介
一 数组简介数组是一种基本的数据结构,用于按顺序存储元素的集合。但是元素可以随机存取,因为数组中的每个元素都可以通过数组索引来识别。#include <iostream>int main() { // 1. Initialize int a0[5]; int a1[5] = {1, 2, 3}; // other element will be set...原创 2020-05-03 13:09:27 · 380 阅读 · 1 评论 -
栈——后入先出的数据结构(LIFO)
在 LIFO 数据结构中,将首先处理添加到队列中的最新元素。与队列不同,栈是一个 LIFO 数据结构。通常,插入操作在栈中被称作入栈 push 。与队列类似,总是在堆栈的末尾添加一个新元素。但是,删除操作,退栈 pop ,将始终删除队列中相对于它的最后一个元素。栈的实现栈的实现比队列容易。动态数组足以实现堆栈结构。这里我们提供了一个简单的实现供你参考:#include <iostre...原创 2020-04-30 18:34:31 · 3151 阅读 · 0 评论 -
队列——先入先出的数据结构(FIFO)
队列是典型的 FIFO 数据结构。插入(insert)操作也称作入队(enqueue),新元素始终被添加在队列的末尾。删除(delete)操作也被称为出队(dequeue)。 你只能移除第一个元素。队列的实现为了实现队列,我们可以使用动态数组和指向队列头部的索引。如上所述,队列应支持两种操作:入队和出队。入队会向队列追加一个新元素,而出队会删除第一个元素。 所以我们需要一个索引来指出...原创 2020-04-30 18:33:00 · 3877 阅读 · 0 评论 -
微信小程序简介、文件类型与目录结构、实例
一、微信小程序简介1. 小程序的特点简单、用完即走低频性能要求不高2. 小程序定义不需要下载安装(安装包<1M)用户用完即走,不用关心是否安装太多应用应用无处不在,随时使用(连接人与服务)APP:体验差、成本高小程序:流程简单、跨平台3. 对开发者的影响短期内提升市场对JS程序员的需求量小程序是零基础开发者入门平台小程序不可以使用已经存在的JS组件库开...原创 2020-03-26 21:17:08 · 712 阅读 · 0 评论 -
算法与复杂度、数据结构、标准模板库(STL)
一、算法与复杂度1. 定义算法:将通过数据处理、数值运算、组合计算、模拟等操作解决问题的步骤成为算法。伪代码:将自然语言和编程语言语法相结合的一种算法描述语言。2. 算法的效率复杂度的评估① 时间复杂度:执行程序所需的时间,对处理器的使用程度;② 空间复杂度:执行程序所需的存储空间,对内存的使用程度。大O表示法评估算法效率的标尺,称为Big-Oh-Notation。用...原创 2020-03-26 21:10:31 · 191 阅读 · 0 评论 -
链表的迭代器
链表的迭代器(C++)STL中的链表#######include我们自己设计的链表迭代器template<class Type>class ListIterrator{public: Boolean NotNull(); Boolean NextNotNull(); Type* First(); Type* Next();};...原创 2020-03-26 10:56:35 · 1099 阅读 · 0 评论 -
基本数据结构 —— 链表的操作(类)
用模板实现链表(类)ListNode 链表节点List 链表链表操作Insert 插入Delete 删除Invert 反转Concatenate//头文件 list.h#ifndef LIST_H#define LIST_H#include<iostream>using namespace std;template<class Ty...原创 2020-03-22 22:38:17 · 157 阅读 · 0 评论 -
基本数据结构 —— 单链表(C++指针)
数组是最常用的数据结构,链表是第二常用的数据结构。数组的缺点:插入或删除新的数据时,需要向后或向前移动很多数据,速度很慢。链表:数据不需要移动,只需改变指针的位置。链表由两部分组成:数据域、链接域单链表实例如下。一个是数字型,一个是字符型。//.h头文件——char型#ifndef THREELETTERLIST_H//预处理指令,防止发生多重包含#define THRE...原创 2020-03-19 00:07:23 · 458 阅读 · 0 评论 -
基本数据结构——队列(动态数组C++)
基本数据结构——队列(动态数组C++)特点:先进先出、后进后出队首front(为空,加一才是第一个数据)、队尾rear(指向数组的最后一个数据)基本操作:Push 给队尾添加数据Pop 从队首删除数据Front 查看队首的数据Rear 查看队尾的数据IsEmpty 判断是否为空//建立头文件queue.h#ifndef _QUEUE_H#define _QUEUE_H...原创 2020-03-16 12:14:09 · 267 阅读 · 0 评论 -
基本数据结构—— 栈(动态数组C++)
顺序栈特点:先进后出、后进先出栈底、栈顶栈的操作Push 将数据压入堆栈(stack[++top] = item;)Top 栈顶位置Pop 删除栈顶位置的数据IsEmpty 判断栈是否为空,即判断top是不是-1//创建头函数 MyStack.h#ifndef _MYSTACK_H#define _MYSTACK_H#include "...原创 2020-03-15 22:23:02 · 401 阅读 · 0 评论 -
基本算法(5) —— 插入排序、快速排序和归并排序
插入排序输入一个元素,插入到一个已经排好序的数列中的适当位置,使数列依然有序。思想:把欲插入的数与数组中各数逐个比较, 当找到第一个比插入数大的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素a[i]即可。如果被插入数比所有的元素值都小则插入最后位置。#include <iostream>using names...原创 2020-03-14 11:48:50 · 171 阅读 · 0 评论 -
基本算法(4)——递归(阶乘、斐波那契数列、二分查找、排列组合)
递归:自己调用自己。优点:容易理解,程序简洁。缺点:中间的结果暂存,需要大量内存。速度慢。例1,求n的阶乘(递归和迭代)_ 简单例2,斐波那契数列(递归)_ 简单例3,二分查找(递归和迭代)_中等例4,排列组合(递归)_困难#include <iostream>using namespace std;/*没有终止条件,无限执行的递归void doA() { ...原创 2020-03-12 11:31:29 · 276 阅读 · 0 评论 -
基本算法(3)—— 顺序查找和二分查找(折半查找)
基本算法(3)—— 顺序查找和二分查找(折半查找)没有排序的数据:只能顺序查找,速度慢排序后的数据:二分查找顺序查找暴力破解法,按照顺序遍历整个数组,查找目标数据。#include <iostream>using namespace std;int SequentialSearch(int *a, int n,const int x); //输入的数组,数组个数,要...原创 2020-03-11 10:47:50 · 511 阅读 · 0 评论 -
最简单的算法(2)—— 冒泡排序和选择排序
冒泡排序思想:从左到右扫描数据,选择最大的数据,放在右边。要点:比较相邻的两个数,如果左边的数大于右边的数就进行交换。交换次数很多。#include <iostream>using namespace std;void BubbleSort(int list[], int n);int main(){ int a[] = { 2,4,6,8,0,1,3,5,...原创 2020-03-10 10:33:32 · 140 阅读 · 0 评论 -
最基本的算法(1)—— 交换
最基本的算法(1)—— 交换交换算法在c/c++中有以下几种实现方式:值传递(传拷贝,不可实现)指针传递(可用,较复杂,c常用)宏函数(c中特有,注意语法)引用传递(c++特有,简单好用)模板函数(调用std库的swap函数)//1. 实现交换算法#include<iostream>using namespace std;int main(){ int...原创 2020-03-09 16:47:07 · 311 阅读 · 0 评论 -
Leetcode_Q1两数之和(C++)
两数之和(C++)题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]...原创 2020-03-09 16:09:40 · 199 阅读 · 0 评论