- 博客(112)
- 资源 (11)
- 收藏
- 关注
原创 leetcode 47 全排列 II
题目描述给定一个可包含重复数字的序列,返回所有不重复的全排列。题目来源:https://leetcode-cn.com/problems/permutations-ii解题思路如果该序列不包含可重复数字,属于基本的深度搜索问题。定义一个数组表示序列中数字是否已选。对于深度搜索的每一层,尝试将序列中未选择数字选择,递归下去即可。这里简单写一下代码:vector<vector&...
2019-08-10 21:47:28
247
原创 leetcode 300 最长上升子序列
题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。题目来源:https://leetcode-cn.com/problems/longest-increasing-subsequence解题思路本题目解题思路有多种,在此一一列举。基于深度搜索遍历所有的上升子序列,找到最长的子序列。这种方法比较简单,但是由于复杂度过高,不通过。// 在子序列前一个元素为 pre时,nu...
2019-08-04 22:39:58
263
原创 leetcode 72 编辑距离
题目描述给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符题目来源:https://leetcode-cn.com/problems/edit-distance解题思路本题目典型的动态规划,动态规划属于十分难的算法题目。在完成动态规划题目时,主要掌...
2019-08-04 20:19:23
373
原创 leetcode 329 矩阵中的最长递增路径
题目描述给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。题目来源:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix解题思路首先通过深度优先搜索很容易得到,从某个点开始的递增路径长度,从所有点中取...
2019-08-04 18:54:39
408
原创 算法中的数论问题
欧几里得求取最大公因子给定两个值 a,b,求取它们的最大公因子 gcd(a,b)。欧几里得算法提供了一种十分简便的方法,其依据定理为:假定 a=b∗d+ca = b*d + ca=b∗d+c,那么有 gcd(a,b) = gcd(b,c),而且当 c=0c = 0c=0 时,gcd(b,0) = b。 (定理一)int gcd(int a,int b){ return b ? gc...
2019-08-04 11:03:55
449
原创 leetcode 160 相交链表
题目描述编写一个程序,找到两个单链表相交的起始节点。题目来源:https://leetcode-cn.com/problems/intersection-of-two-linked-lists解题思路leetcode 链表题目中,链表结构体都是没有头结点的。每次我都会自动构造一个头结点。链表题目其实都不难,画画图基本都能够解出来。本题目比较难,而且该题目解题思路十分巧妙。...
2019-08-01 15:24:01
156
原创 leetcode 92 反转链表 II
题目描述反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。题目来源:https://leetcode-cn.com/problems/reverse-linked-list-ii解题思路leetcode 链表题目中,链表结构体都是没有头结点的。每次我都会自动构造一个头结点。链表题目其实都不难,画画图基本都能够解出来。请先查看 leetcode 206 反转链表 一题。...
2019-08-01 14:05:24
194
原创 leetcode 206 反转链表
题目描述反转一个单链表。题目来源:https://leetcode-cn.com/problems/reverse-linked-list解题思路leetcode 链表题目中,链表结构体都是没有头结点的。每次我都会自动构造一个头结点。链表题目其实都不难,画画图基本都能够解出来。本题目有两种思路。一种是构建一个新的链表头结点,每次从旧链表中取出第一个元素,将其放入新链表中的...
2019-08-01 12:26:44
153
原创 leetcode 24 两两交换链表中的节点
题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。题目来源:https://leetcode-cn.com/problems/swap-nodes-in-pairs解题思路leetcode 链表题目中,链表结构体都是没有头结点的。每次我都会自动构造一个头结点。链表题目其实都不难,画画图基本都能够解出来。...
2019-08-01 10:41:13
139
原创 leetcode 61 旋转链表
题目描述给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。题目来源:https://leetcode-cn.com/problems/rotate-list解题思路leetcode 链表题目中,链表结构体都是没有头结点的。每次我都会自动构造一个头结点。链表题目其实都不难,画画图基本都能够解出来。本题目使用双指针算法即可。定义两个指针 firs...
2019-08-01 10:21:56
128
原创 leetcode 83 删除排序链表中的重复元素
题目描述给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。题目来源:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list解题思路leetcode 链表题目中,链表结构体都是没有头结点的。每次我都会自动构造一个头结点。链表题目其实都不难,画画图基本都能够解出来。本题目比较简单。判断...
2019-08-01 10:09:28
143
原创 leetcode 19 删除链表的倒数第N个节点
题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。要求一趟扫描完成。题目来源:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list解题思路leetcode 链表题目中,链表结构体都是没有头结点的。每次我都会自动构造一个头结点。链表题目其实都不难,画画图基本都能够解出来。本题...
2019-08-01 09:56:55
164
原创 leetcode 275 H指数 II
题目描述给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列。编写一个方法,计算出研究者的 h 指数。h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)至多有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)"题目来源:https:/...
2019-07-31 23:43:21
306
原创 leetcode 287 寻找重复数
题目描述给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。要求不能改变原数组。题目来源:https://leetcode-cn.com/problems/find-the-duplicate-number解题思路本题目属于比较难的二分算法的应用,这种题目虽然没有二段性...
2019-07-31 20:32:03
153
原创 leetcode 162 寻找峰值
题目描述峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i]≠nums[i+1]nums[i] \neq nums[i+1]nums[i]̸=nums[i+1],找到峰值元素并返回其索引,假设 nums[−1]=nums[n]=−∞nums[-1] = nums[n] = -\inftynums[−1]=nums[n]=−∞。数组可能包含多个峰值,在这种...
2019-07-31 18:30:00
169
原创 leetcode 153 寻找旋转排序数组中的最小值
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。假设数组中不存在重复元素。题目来源:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array解题思路二分算法相关使用,请先跳...
2019-07-31 11:16:07
151
原创 leetcode 74 搜索二维矩阵
题目描述编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。题目来源:https://leetcode-cn.com/problems/search-a-2d-matrix解题思路二分算法相关使用,请先跳转到 https://blog.youkuaiyun.com/YangLei253...
2019-07-31 00:02:20
202
原创 leetcode 34 在排序数组中查找元素的第一个和最后一个位置
题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值,返回 [-1, -1]。算法时间复杂度必须是 O(log n) 级别。解题思路二分算法相关使用,请先跳转到 https://blog.youkuaiyun.com/YangLei253/article/details/96917904 学习划分区间图。根据...
2019-07-30 20:20:23
142
原创 leetcode 35 搜索插入位置
题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。假设数组中无重复元素。题目来源:https://leetcode-cn.com/problems/search-insert-position解题思路典型的二分算法的应用。两个模板int bsearch_1(int l, int r){ whil...
2019-07-30 19:25:18
155
原创 STL总结之unordered_map/unordered_multimap
介绍unordered_map 是一个封装哈希表的无序容器。容器中每个元素都是 key/value,每个 key 仅可出现一次。unordered_multimap 是一个封装哈希表的无序容器。容器中每个元素都是 key/value,每个 key 可重复出现。unordered_map 和 unordered_multimap 均定义于头文件 <unordered_map> 中,...
2019-07-30 00:46:46
2827
1
原创 STL总结之unordered_set/unordered_multiset
介绍unordered_set 是一个封装哈希表的无序容器,其中每个元素仅可出现一次。unordered_multiset 是一个封装哈希表的无序容器,其中每个元素可出现任意次。unordered_set 和 unordered_multiset 均定义于头文件 <unordered_set> 中,各自声明如下:template< class Key, c...
2019-07-29 19:56:14
1256
原创 STL总结之string
介绍string 是一个封装字符串的容器。string 定义于头文件 <string> 中,其声明如下:template< class CharT, class Traits = std::char_traits<CharT>, class Allocator = std::allocator<CharT>> c...
2019-07-28 23:12:02
161
原创 STL总结之priority_queue
介绍priority_queue 是容器适配器,它提供程序员堆数据结构的功能。priority_queue 底层容器有两种可选—— vector、deque,默认使用 vector。priority_queue 定义于头文件 <queue> 中 ,其声明如下:template< class T, class Container = std::vector&...
2019-07-28 18:49:41
160
原创 STL总结之queue
介绍queue 是容器适配器,它提供程序员队列数据结构的功能。queue 底层容器有两种可选—— deque 和 list。默认使用 deque。queue 定义于头文件 <queue>,其声明如下:template< class T, class Container = std::deque<T>> class queue;成员函...
2019-07-28 18:15:10
167
原创 STL总结之stack
介绍stack 是容器适配器,它提供程序员栈数据结构的功能。stack 底层容器有三种可选—— vector、deque、list,默认使用 deque。stack 定义于头文件 <stack>,其声明如下:template< class T, class Container = std::deque<T>> class stack;...
2019-07-28 18:00:45
168
原创 STL总结之multimap
介绍multimap 是一个封装红黑树 (自平衡二叉树) 的关联容器。容器中每个元素都是 key/value,其中 key 为排序对象。每个 key 可重复出现。multimap 可被当做 字典 使用。multimap 定义于头文件 <map> 中,其声明如下:template< class Key, class T, class Compare ...
2019-07-28 16:15:36
608
原创 STL总结之map
介绍map 是一个封装红黑树 (自平衡二叉树) 的关联容器。容器中每个元素都是 key/value,其中 key 为排序对象。每个 key 只能出现一次,不允许重复出现。map 定义于头文件 <map> 中,其声明如下:template< class Key, class T, class Compare = std::less<Key>...
2019-07-28 13:01:13
364
原创 STL总结之multiset
介绍multiset 是一个封装红黑树 (自平衡二叉树) 的关联容器,其中元素依据其值自动排序且每个元素可出现任意次。multiset 定义于头文件 <set> 中,其声明如下:template< class Key, class Compare = std::less<Key>, class Allocator = std::alloc...
2019-07-28 11:08:44
1188
原创 STL总结之set
介绍set 是一个封装红黑树 (自平衡二叉树) 的关联容器,其中元素依据其值自动排序且每个元素仅能出现一次。set 容器定义于头文件 <set>,其声明如下:template< class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Ke...
2019-07-28 09:34:59
308
原创 STL总结之forward_list
介绍forward_list 是一个封装单向链表的顺序容器,属于受限的 list,可以高效地实现在任意位置插入或删除元素,但是无法通过其索引位置进行访问。forward_list 定义于头文件 <forward_list>,其声明如下:template< class T, class Allocator = std::allocator<T>&...
2019-07-27 15:25:57
430
原创 STL总结之list
介绍list 是一个封装双向链表的顺序容器,可以高效地实现在任意位置插入或删除元素,但是无法通过其索引位置进行访问。list 定义于头文件 <list>,其声明如下:template< class T, class Allocator = std::allocator<T>> class list;list 顺序容器是一个类。初...
2019-07-26 22:52:42
264
原创 STL总结之deque
介绍deque 是一种双向开口的连续线性空间,可以高效地在头尾两端插入和删除元素、使用索引位置访问元素,但是在中部插入元素是比较麻烦的。deque 容器可以实现高效地在头尾两端插入和删除操作,这就意味着它绝不是基于一个数组实现的。它的实现机制如图示:queue 定义于头文件 <deque>,其声明如下:template< class T, class A...
2019-07-26 01:03:03
253
原创 STL总结之vector
介绍vector 是一个封装动态数组的顺序容器,可以高效地在尾部插入和删除元素、使用索引位置访问元素,但是在中部插入或删除元素是比较麻烦的。vector 定义于头文件 <vector>,其声明如下:template< class T, class Allocator = std::allocator<T>> class vector;...
2019-07-25 23:54:13
236
原创 STL总结之array
介绍array 是一个封装普通数组的顺序容器,其数组大小固定,可以使用索引位置访问元素,受限地在尾部插入和删除元素,但是受限地在中部插入或删除元素是比较麻烦的 (受限指的是可能因为数组大小原因,导致操作失败)。array 定义于头文件 <array>,其声明如下:template< class T, std::size_t N> struct array;...
2019-07-25 23:01:08
806
原创 STL 总结目录
定义从程序员的角度来看,STL 是由一些可适应不同需求的集合类和一些能够在这些数据集合上运作的算法组成。组成STL = 容器 + 迭代器 + 算法。容器用于管理某类对象的集合。每一种容器都有其优点或缺点,因此为应对不同需求,STL 准备了不同的容器类型。迭代器用来在一个对象集合内遍历元素,而且这个对象集合可以是整个容器,也可以是容器的一部分。迭代器的优点在于:为所有各式各样的容...
2019-07-24 00:22:05
167
原创 leetcode 69 x的平方根
题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。题目来源:https://leetcode-cn.com/problems/sqrtx解题思路本题目有两种解法,一种是遍历判断,复杂度比较高;另一种则是二分算法。本题主要讲述二分算法的使用。两个模板int bsearc...
2019-07-23 09:50:12
216
原创 穷举所有可能的出栈序列
题目描述输入一个入栈序列,输出可能的出栈序列。输入格式第一行输入一个整数 N ,表示入栈序列的长度。第二行输入 n 个数字,表示入栈序列。输出格式输出所有可能的出栈序列输入样例31 2 3输出样例1 2 31 3 22 1 32 3 13 2 1解题思路很容易看出来,本题目是一道递归题。可以通过穷举遍历得到结果,因为对于任意一个栈状态,我们有两种选择,一种是向...
2019-07-09 23:04:42
2326
原创 分形之城
题目描述城市的规划在城市建设中是个大问题。不幸的是,很多城市在开始建设的时候并没有很好的规划,城市规模扩大之后规划不合理的问题就开始显现。而这座名为 Fractal 的城市设想了这样的一个规划方案,如下图所示:当城区规模扩大之后,Fractal 的解决方案是把和原来城区结构一样的区域按照图中的方式建设在城市周围,提升城市的等级。对于任意等级的城市,我们把正方形街区从左上角开始按照道路标...
2019-06-24 17:36:29
570
原创 约数之和
题目描述假设现在有两个自然数 A 和 B,S 是 ABA^BAB 的所有约数之和。请你求出 S mod 9901的值是多少。输入格式在一行中输入用空格隔开的两个整数 A 和 B 。输出格式输出一个整数,代表 S mod 9901 的值。数据范围0≤A,B≤5×1070≤A,B≤5\times10^70≤A,B≤5×107输入样例:2 3输出样例:15解题思路本题目需...
2019-06-22 17:52:04
1437
原创 奇怪的汉诺塔
题目描述汉诺塔问题,条件如下:1、这里有 A、B、C 和 D 四座塔。2、这里有 n 个圆盘,n 的数量是恒定的。3、每个圆盘的尺寸都不相同。4、所有的圆盘在开始时都堆叠在塔 A 上,且圆盘尺寸从塔顶到塔底逐渐增大。5、我们需要将所有的圆盘都从塔 A 转移到塔 D 上。6、每次可以移动一个圆盘,当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时,可将圆盘移至这座塔上。请你求出将所有圆盘从塔...
2019-06-22 11:24:20
637
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人