自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

胖虎的博客

只有彻底的分崩离析 才能看到新大陆和光 /个人博客地址: yunhaolsh.gitee.io

  • 博客(36)
  • 收藏
  • 关注

原创 Leetcode二叉树最大深度

  二叉树的最大深度,即为二叉树的层数,开始的想法是遍历左子树和遍历右子树,返回记录的最大值。这样明显是有漏洞的,如果最右的右子树有左孩子或者左子树有右孩子,结果就是不正确的。  使用递归的方法,整树的最大深度为左孩子树的最大深度或者右孩子树的最大深度。递归结束的条件是,当一个结点的左右子树都为空时,返回1结束。核心思想是DFS深度优先遍历算法。文章目录#include using nam...

2020-04-07 22:54:45 173

原创 LeetCode15三数之和

  上来先考虑暴力算法,如下。但是元素不相等的意思是任意子答案的结果都不能重复,顺序不同也是不可以的。比如[-1,0,1]和[-1,1,0]也是不可以的。按照代码来看,相当于一个子答案保留了三份。由此可见,本题真正的难点在于去重复。文章目录#include #include #include using namespace std;class Solution {public:ve...

2020-04-07 22:53:02 208

原创 LeetCode-搜索插入位置

  这道题比较简单,开始想使用find函数,但是对于vector本身没有find函数的容器,需要调用algorithm中的find函数。vector<int>::iterator it = find(vec.begin(),vec.end(),target),若查找失败返回vec.end(),查找成功返回迭代器,但是题目要求返回的是数组中的位置,所以感觉不行。最简单的还是写循环,清晰明...

2020-03-20 23:38:18 141

原创 LeetCode-实现Strstr

题解双指针法  这道题是字符串匹配问题,第一反应当然是KMP算法和BF算法,虽然前两天刚学了KMP,自己动手写还是不会写next数组。按自己思路写了双指针算法,虽然提交通过,但是代码质量极差可以称为垃圾代码…,运行时间1960ms…#include "iostream"#include "string"using namespace std;class Solution {publi...

2020-03-20 23:37:32 403

原创 LeetCode-移除元素

题解  首先是我提交的解法,思路繁琐,代码长,曲线救国。采用前后指针的方法,找到符合条件的元素就交换位置。防止重复交换,要把每次交换完的val值修改,合理改成INT32MAX,即假设了测试案例的数组中不含有INT32_MAX.#include "iostream"#include "vector"#include "limits"using namespace std;class So...

2020-03-20 23:36:56 69

原创 LeeCode-合并两个有序链表

题解 迭代法  画图可以容易想到迭代的方法。要注意的是,需要设置一个指针(head),记录合成链表最开始的位置。还需要维护一个具有next指针的元素(temp),实时更新位置,所以要new一个和结点结构一样的元素。#include "iostream"using namespace std;class Solution {public: ListNode* mergeTwoLi...

2020-03-20 23:35:44 219

原创 LeetCode-有效括号

  这道题,第一想法是把三种括号组对儿存入哈希表中,然后遍历字符串遇到key就搜索最近的value,若找不到就退出,找到就配对成功。配对成功后,把两个值都改为空格,最后只要遍历字符串中有没有非空格的字符,就可以知道true还是false。哈希表不太熟所以用循环写了一下: #include "iostream" #include "string" #include "map" using n...

2020-03-17 22:45:47 82

原创 LeetCode-最长公共前缀

  这道题需要熟练掌握string类的结构,常规解法是水平查找法,即选第一个单词为标准,一次和后面每个单词一位一位比对,每完成一位的匹配就把它加入到结果字符串中。为了避免索引越界,所以首先找出字符串中长度最小的字符作为循环的终止条件。题解垂直查找法#include "iostream"#include "string"#include "vector"using namespace s...

2020-03-17 22:44:54 105 1

原创 LeetCode-回文数

题解  这道题需要处理一个溢出的问题。如下是我第一次提交的代码,11509个测试用例可以通过11508个,是因为没有考虑到直接反向输出回文数值也许会导致溢出的问题,且程序耗时较长。#include "iostream"#include "vector"#include "math.h"using namespace std;class Solution {public: bo...

2020-03-17 22:43:18 90

原创 LeetCode-两数之和

LeetCode-两数之和哈希表  暴力解法时间复杂度为O(n^2),为了对时间复杂度进行优化,使用哈希表,通过空间换取时间。保持数组中每个元素预期索引相互对应的最好方法也是哈希表。时间复杂度为O(1)题解//两遍哈希表 一遍添加索引,一边检查元素class Solution{public: vector<int>twoSum(vector<int>&n...

2020-03-17 22:42:43 88

原创 LeetCode-删除重复项

Tips  使用vector.size()时,在for循环中要写i<size()不要写i<size()-1。因为当vector的size为0时,size()函数返回值是无符号整型,这时vec.size()-1是一个正数,会导致*vec[i]*访问越界。##题解  首先考虑了暴力解法,两个循环寻找相等的元素,找到后将其就地改为-1,记录下个数。再一次循环把不是-11的元素(随意值)...

2020-03-16 23:36:49 140

原创 LeetCode-整数反转

###Mark:INT_MAX,INT_MIN由标准头文件<limits.h>定义。INT_MAX=2^31-1(2,147,483,647)INT_MIN=-2^31(-2,147,483,648)题解  这道题主要难点是要考虑溢出的问题。  数学解法:#include "iostream"#include "limits.h"class Solution{ ...

2020-03-16 23:35:51 87

原创 数据结构-线性表

线性表  线性表(List):由零个或多个数据元素组成的有限序列。  优点:1.无需为表示表中元素之间的逻辑关系而增加额外存储空间。2.可以快速存取表中任意位置元素。  缺点:1.插入和删除操作需要移动大量元素。2.当线性表长度变化较大时,难以确定存储空间的容量。3.容易造成存储空间的碎片。线性表顺序存储结构#define MAXSIZE 20typedef int ElemType;...

2020-03-16 23:33:41 127

原创 数据结构-线索二叉树

线索二叉树###为什么要有线索二叉树?  比如单向链表因为无法快速获得前驱结点,所以有了双向链表。线索二叉树就是因为普通二叉树无法直接的到前驱结点和后继结点的信息且空间浪费严重的问题,所以发明了线索二叉树。线索二叉树  当一个树采用中序遍历的时候,正好每隔一个节点的左右可以存放两个指针,可以存放前驱和后继。将每一隔加点扩展为五个元素的结构,每个节点包括:数据域、左标签、右标签、左指针、右...

2020-03-16 23:30:33 287

原创 数据结构-哈希表

Hash表  哈希表也叫散链表,是根据关键码值(Key Value)而直接进行访问的数据结构。通过把关键字码值映射到法系表中的一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。散列存储的基本思路  以数据中每个元素的关键字K为自变量,通过散列函数*H(K)*计算出函数值,以该值作为一块连续存储空间的单元地址,将该元素存储到函数值对应的单元中。哈希表查...

2020-03-16 23:29:15 753

原创 数据结构-KMP算法

KMP算法  KMP算法常用于字符串的模式匹配,KMP算法相对于朴素算法有了很大的改进,避免了没必要的回溯。该算法主要研究模式串,不需要主串的信息。  next数组:当模式匹配串T失配的时候,next 数组对应元素的指导应该用T串的哪一位进行下一轮的匹配。KMP算法核心就在于构建next数组。  默认next数组0号位存放的是数组的长度,字符串从1开始。i是后缀,j是前缀。next数组的第一...

2020-03-16 23:28:27 185

原创 数据结构-树的存储结构

树的存储结构### 双亲表示法  双亲表示法可以根据某结点的*Parent*指针找到它的双亲结点,所用时间复杂度为*O(1)*,但当找某个结点的子结点时,就需要遍历整个树结构。#define MAX_TREE_SIZE 100//结点定义typedef int ElemType;typedef struct PTNode{ ElemType data; int parent;...

2020-03-16 23:27:28 62

原创 数据结构-赫夫曼树

赫夫曼树  赫夫曼编码是首个试用的编码方案。属于无损压缩的编码方案。在数据通信中,赫夫曼编码可以根据字符出现频率,构造出一种不等长的二进制,使编码后的电文长度最短,且不产生二义性。树的带权路径长度WPL  weighteed path length是树中所有节点的带权路径长度之和。WPL 值越小,说明构造出来的二叉树性能越优。赫夫曼树为最优 WPL 二叉树赫夫曼编码  1. 定长编码:一...

2020-03-16 23:26:26 151

原创 TCP/IP OSI参考模型

物理层  物理层决定最基础的传送通道,涉及问题主要是建立、维护和释放物理链路层所需的机械的、电气的、光学的、功能的和规程的特性。如光缆如何抗衰耗、无电设备如何提高发射功率等数据链路层  数据链路层在物理层提供的按位服务的基础上,在相邻的网络结点之间提供简单的、传输以帧为单位的数据,同时他还负责数据链路的流量控制、差错控制。数据层为网络层提供简单的通信链路,通信实体所在的系统必须经过物理介质直...

2020-03-16 23:25:28 103

原创 LeetCode-罗马数字转整数

  首先想到的是最暴力的解法,列出所有的可能,其实不用考虑字符串长度是奇数还是偶数,如果有下一位的话就判断是否属于特殊情况,如果没有下一位的话,就按照单位字符处理。运行结果超过86%的提交。Tipscontinue只退出单层循环。break退出整个循环。在处理字符串类型时,末尾会存在一位/0,所以在i到末尾时,判断i+1位不会出现超出索引范围的错误。题解1#include "iost...

2020-03-16 16:07:08 103

原创 初级算法:计算质数个数

计数质数统计所有小于非负整数 n 的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。思路一:暴力法,两个循环 超时 不通过编译 时间复杂度class Solution {public: int countPrimes(int n) { int cnt=0; for(int...

2019-11-17 22:23:38 608

原创 初级算法:3的幂

3的幂给定一个整数,写一个函数来判断它是否是 3 的幂次方。示例 1:输入: 27输出: true示例 2:输入: 0输出: false示例 3:输入: 9输出: true示例 4:输入: 45输出: false进阶:你能不使用循环或者递归来完成本题吗?思路:比较简单 分情况考虑 考虑 n0 n1 n==其他 的情况n为其他时 循环对3取余 然后每次...

2019-11-13 20:29:35 1169

原创 初级算法:合并两个有序链表

合并两个有序链表将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4不会 看的题解思路1:递归先检查是否为空 其中一个为空 直接返回非空链表 两个都为空的话 返回NULL先比较两个链表的头结点,较小的选择作...

2019-11-12 20:10:10 118

原创 初级算法:爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。3. 1 阶 + 1 阶 + 1 阶4. 1 阶 + 2 阶5. ...

2019-11-10 20:18:45 171

原创 初级算法:有效字母的异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?思路1...

2019-11-08 21:36:21 80

原创 初级算法:整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。按照题解思路: 不通过??为毛线...

2019-11-08 20:14:37 180

原创 初级算法:翻转链表

反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?思路:思路很简单 使用三个指针 循环使后一个指向前一个 再用第三个指针保存没有翻转的剩余指针的位置自己敲得程序运行失败/** * Definit...

2019-11-05 18:38:08 79

原创 初级算法:字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = “leetcode”返回 0.s = “loveleetcode”,返回 2.注意事项:您可以假定该字符串只包含小写字母。思路1:最先考虑了两个指针的方法,一个固定一个移动向后找元素,然后当比较完,如果没有与之相等的话就返回。如果存在相等的元素的话就使固定的指针向后移位,如此循环。但...

2019-10-31 18:29:06 147

原创 初级算法:合并两个有序数组

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,...

2019-10-31 16:43:52 179

原创 初级算法:两数之和

两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]我的思路:...

2019-10-27 16:52:55 89

原创 初级算法:移动零

移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。我的思路:遍历数组 为零的话直接擦除,然后在末尾压入0。运行不成功,问题出在不理解erase的用法,不理解擦除后迭代器指向的是哪一个。根据其他大神题...

2019-10-26 23:01:40 489

原创 初级算法:加一

加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。思路一:...

2019-10-26 16:12:51 191

原创 初级算法:两个数组交集

两个数组的交集 II给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。思路...

2019-10-24 20:26:54 452

原创 初级算法:只出现一次的数字

题目要求:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4思路1:第一遍做考虑暴力解法:先对无序数列进行排序,然后使用两个下标线性遍历有序数组。注意事项:1.下...

2019-10-24 19:37:41 79

原创 LeetCode初级算法

LeetCode初级算法之买股票的最佳时机题目要求给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 ...

2019-10-14 15:31:02 255

原创 LeetCode初级算法

LeetCode初级算法之从排序数组中删除重复项题目要求:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要...

2019-10-14 14:47:47 127

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除