
算法与数据结构
番茄都是西红柿
大家一起交流学习啊~
展开
-
复数类
#include <iostream>#include<stdlib.h>using namespace std;class Complex{public: Complex(double real, double image); Complex operator + (const Complex &c); Complex operator - (const Comp原创 2017-10-31 20:16:48 · 346 阅读 · 0 评论 -
链表面试题—反转链表
Reverse a singly linked list. Example: Input: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL Output: 5-&gt;4-&gt;3-&gt;2-&gt;1-&gt;NULL Follow up: A linked list can be rever原创 2018-08-08 14:44:50 · 255 阅读 · 0 评论 -
LeetCode832. 翻转图像
给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。 水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。示例 1:输入: [[1,1,0],[1,0,1],[0,0...原创 2018-08-18 18:28:57 · 512 阅读 · 0 评论 -
LeetCode1. 两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 方法一(暴力解决):class Solution {public: ve...原创 2018-08-19 00:28:05 · 177 阅读 · 0 评论 -
LeetCode:771. 宝石与石头
问题描述:给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此”a”和”A”是不同类型的石头。 示例 1: 输入: J = “aA”, S = “aAAbbbb” 输出:3示例 2: 输入: J ...原创 2018-08-16 10:45:37 · 238 阅读 · 0 评论 -
LeetCode695. 岛屿的最大面积(深度优先DFS和广度优先BFS算法 )
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1: [[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0]...原创 2018-08-16 11:47:24 · 1785 阅读 · 0 评论 -
LeetCode2. 两数相加
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807public ListNode...原创 2018-08-19 16:46:50 · 162 阅读 · 0 评论 -
LeetCode106. 从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7中序遍历:访问根结点 根节点的左结点进行中序遍历根结点...原创 2018-08-23 00:27:37 · 455 阅读 · 0 评论 -
LeetCode709. 转换成小写字母
实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。 Example 1:Input: “Hello” Output: “hello” Example 2:Input: “here” Output: “here”class Solution {public: string toLowe...原创 2018-08-17 16:20:59 · 234 阅读 · 0 评论 -
基于单链表的栈
// 基于C++template实现的单链表类# ifndef SINGLE_LIST_HXX# define SINGLE_LIST_HXX//节点结构template <typename T>class Node{public : T _value; Node* _next;public: Node() = default; Nod...原创 2018-04-12 01:36:20 · 276 阅读 · 0 评论 -
基于数组栈的实现
//基于数组的栈实现# ifndef ARRAY_STACK_HPP# define ARRAY_STACK_HPPtemplate<typename T>class ArrayStack{public: ArrayStack(int s = 10); //默认的栈容量为10 ~ArrayStack();public: T top(); ...原创 2018-04-12 01:29:22 · 455 阅读 · 0 评论 -
在C++中深拷贝和浅拷贝的基本用法
首先,什么是浅拷贝?什么是深拷贝? 浅拷贝:在C++中,在用一个对象时,只是复制了成员,并没有复制资源,使两个对象同时指向了同一资源的复制方式称为浅拷贝;(简单的来说就是成员数据间的赋值—数据拷贝) 深拷贝:是指向内容复制到当前对象新分配的缓存缓冲区中的一种复制方式。(—地址拷贝) 我们在学习编程语言过程中常见的拷贝方式如下这种,这是简单的普通对象拷贝: int a=12; int b=a原创 2017-11-12 19:12:06 · 455 阅读 · 0 评论 -
二叉树的基本操作(利用递归)
#include <cstdlib> #include <iostream> #include <stack> using namespace std; //先定义一棵二叉树 typedef char ElementType; typedef struct BiTreeNode { ElementType data; ...原创 2018-03-26 09:45:03 · 194 阅读 · 0 评论 -
关于红黑树原理及算法详解
目录: 1 红黑树的概念 2 红黑树的性质 3 红黑树的基本操作(一) 左旋和右旋 4 红黑树的基本操作(二) 添加 5 红黑树的基本操作(三) 删除 6 红黑树的应用 7 红黑树与AVL树的比较 红黑树: R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Blac...原创 2018-04-16 22:32:15 · 832 阅读 · 0 评论 -
数据结构--队列
像栈一样,队列(queue)也是一种线性表,它的特性是先进先出,插入在一端,删除在另一端。就像排队一样,刚来的人入队(push)要排在队尾(rear),每次出队(pop)的都是队首(front)的人。 如下图,描述了一个队列模型。 和栈一样,队列也有数组实现和链表实现两种,两种实现都能给出快速的O(1)运行时间,区别在于链表实现指针域要占用空间,频繁的new和delete会消耗不少的时间开...原创 2018-04-11 23:25:31 · 220 阅读 · 0 评论 -
走迷宫(回溯)求路径长度/最短路径表
判断是否能从迷宫的入口到达出口输入: 先输入两个整数表示迷宫的行数m和列数n,再输入口和出口的坐标,最后分m行输入迷宫,其中1表示墙,0表示空格每个数字之间都有空格。输出: 若能到达终点,输出从起点到终点的(最短?)路径长度, 走不通时输出“No”输入样例:(行列坐标从0开始)12 12 1 8 10 7 1 1 1 1 1 1 1 1 1 1 1 1 1 ...原创 2018-04-11 23:36:41 · 2125 阅读 · 0 评论 -
C++实现AVL树
AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。一棵AVL树有如下必要条件:1.它必须是二叉查找树。 2.每个节点的左子树和右子树的高度差至多为1。 左边二叉树的节点45左子树高度2,右子树高度0,...原创 2018-04-12 00:27:11 · 2032 阅读 · 0 评论 -
栈
栈的简介 1.1栈的特点栈(Stack)是一种线性存储结构,它具有如下特点:栈中的数据元素遵守”先进后出”(First In Last Out)的原则,简称FILO结构。 限定只能在栈顶进行插入和删除操作。 1.2栈的相关概念栈的相关概念:栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。 压栈:栈的插入操作,叫做进栈,也称压栈、入栈。 弹栈:栈的删除操作...原创 2018-04-12 01:28:37 · 215 阅读 · 1 评论 -
C++中vector的基本用法
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1 基本操作(1)头文件#include.(2)创建vector对象,vector vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout&amp;lt;#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;algorithm&amp;gt;#incl原创 2018-08-17 17:29:42 · 492 阅读 · 0 评论