自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(154)
  • 收藏
  • 关注

原创 Dell G3 系列电脑安装Ubuntu 16.0.4详细步骤解析

导入:现在对于每一位想要从Python编程实践的技术人员而言,Ubuntu已经成为了必要的辅助系统。因为在Linux环境下,配置Python的基本环境将更加方便,而且可以针对性的纠正错误,由此可以节省大量的时间。但在Windows系统下安装另一个系统(如Ubuntu16.0.4),会出现诸多问题,那么接下来本博文就以Dell G3 系列安装Ubuntu16.0.4系统为例,详细讲解其中的步骤,尽...

2019-01-13 21:24:12 12754 36

原创 Leetcode典型题解答和分析、归纳和汇总——T581(最短无序连续子数组)

问题分析:给定一个整数数组,你需要找到一个来连续的子数组,如果对这个子数组进行排序,那么整个数组将会变成升序排序。你要找的子数组应该是最短的,并且可以包括边界等于号。问题分析:我们可以采用双指针的方式来进行求解。【1】用max标记局部极大值的位置,而用end来标记这个局部极大值应该出现的位置;【2】从前往后遍历:如果后面的数比max小,则将end出现的位置记录下来,直到...

2020-03-16 16:10:43 220

原创 Leetcode典型题解答和分析、归纳和汇总——T543(二叉树的直径)

问题描述:给定一颗二叉树,你需要计算它的直径长度。问题分析:本题是一个典型的二叉树递归算法考察。我们需要分别计算出最长的左右子树,然后对最长进行返回。class Solution{ int Maxlen = 0; public: int diameterOfBinaryTree(TreeNode* root) { helper(roo...

2020-03-16 15:35:02 218

原创 Leetcode典型题解答和分析、归纳和汇总——T538(把二叉树转换为累加树)

问题描述:给定一个二叉搜索树,把他转为累加树,使得每个节点的值都是原来的节点值加上所有大于它的节点值之和。问题分析:注意二叉搜索树具有明显的特征是:左子树的值比右子树上的值要小。class Solution{ private: int val =0; public: TreeNode* convertBST(TreeNode* root) ...

2020-03-16 15:15:35 183

原创 Leetcode典型题解答和分析、归纳和汇总——T461(汉明距离)

问题描述:两个整数之间的汉明距离是指这两个数字对应二级制位不同的位置的数目。给出两个整数X和Y,计算它们之间的汉明距离。注意数据是否会溢出。问题分析:本题我们将采用位运算的的方式来进行求解。每次都将数据进行末尾比较,如果相同,则距离保持不变,否则距离加一class Solution {public: int hammingDistance(int x, in...

2020-03-16 15:02:08 146

原创 Leetcode典型题解答和分析、归纳和汇总——T448(找到所有数组中消失的数字)

问题描述:给定一个范围1<a[i]<n的整型数组,数组中的元素一些出现了两次,另一些只出现了一次。找到所有在[1,n]范围中没有出现的数字。注意:时间复杂度为O(n),空间复杂度为O(1)。问题分析:本题是一个简单的数学类型的题目,主要在于如何找到数学关系。【1】确认数组的长度,如果为空,则返回nums即可。【2】非空,则进行遍历操作,遍历数组元素,取得下标,...

2020-03-16 14:46:48 166

原创 Leetcode典型题解答和分析、归纳和汇总——T437(总路径和III)

问题描述:给定一个二叉树,它的每个节点都存放着一个整数值,找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要从叶子节点结束,但是路径方向必须是从上到下的。问题分析:本题可以采用递归算法:【1】从根节点开始,如果根节点为空,则返回为0;【2】根节点可以组成的路径数+左孩子节点的路经数+右孩子节点的路径数(第一层递归)【3】递归求解本节点的路径数(DFS...

2020-03-16 14:10:07 137

原创 Leetcode典型题解答和分析、归纳和汇总——T347(前K个高频元素)

问题描述:给定一个非空的整数数组,返回其中出现频率前K高的元素。问题分析:这个是必须有时间复杂度要求的,否则我们可以采用暴力法来求解。应该采用堆排序算法。这里我们采用小根堆的方式来进行,因为求前K个大的元素,一般都是采用小根堆的排序方式。具体操作如下【1】遍历数组,采用hash表录入频率。【2】遍历哈希表,维护一个出现频率K多的小根堆;【3】优先队列已经满了,需要判...

2020-03-16 11:49:32 180

原创 Leetcode典型题解答和分析、归纳和汇总——T338(比特位计数)

问题描述:给定一个非负整数num,对于0<i<nums范围中的每个数字i,计算其二进制数中1的个数,并将其返回。问题分析:本题考察数学知识,主要在于如何处理数学中的二进制问题。当一个数是奇数的时候,它的1的个数等于前面一个偶数+1;而当是偶数的时候,它的1的个数等于前面一个偶数右移一位的个数。class Solution{ public: ...

2020-03-16 11:13:10 152

原创 Leetcode典型题解答和分析、归纳和汇总——T337(打家劫舍III)

问题描述:某个小区只有一个入口,称之为根,除了跟之外,每栋楼房有且仅有一个子房与其连接,类似于二叉树。如果两个直接相连的房子在同一天晚上被打劫,房屋将会自动报警,请问:如何在不报警的情况下,使得偷盗金额最大化。问题分析:本题具有最优子结构:即最大值与左右子树的最大值有关,而且是相互独立的,可以采用动态规划算法来进行求解。其状态包括:(1)偷当前节点,则其左右节点不能再偷。(2)...

2020-03-16 10:56:09 113

原创 Leetcode典型题解答和分析、归纳和汇总——T322(零钱兑换)

问题描述:给定不同面额的硬币coins和一个总金额amount。编写一个函数可以计算凑成这个金额的最少硬币。如果没有这个组合,返回-1。问题分析:直观解决办法是从最大面额进行匹配,这样做会让硬币数额最少。...

2020-03-16 10:24:32 223

原创 Leetcode典型题解答和分析、归纳和汇总——T287(寻找重复数)

问题描述:给定一个包含n+1个整数的数组nums,其数字在1到n之间,可知至少存在一个重复整数,假设只有一个重复的整数,请找出来。问题分析:【1】采用暴力方法:(显然是不符合时间复杂度要求的!!!)class Solution {public: int findDuplicate(vector<int>& nums) { i...

2020-03-15 16:36:40 254

原创 Leetcode典型题解答和分析、归纳和汇总——T283(移动零)

问题描述:给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。问题分析:本题单纯考察数学类问题,我们只需要用两个指针变量i,j,然后进行遍历,对于nums[i]非0的数,进行入数组操作nums[j]=nums[i],否则继续遍历,对于最后的0元素填补,则用for循环继续进行。class Solution {public: void ...

2020-03-15 15:26:06 150

原创 Leetcode典型题解答和分析、归纳和汇总——T279(完全平方数)

问题分析:给定一个正整数n,找到若干个完全平方数(比如1,4,9,16,...)使得它门的和为n,你需要让其组成的完全平方数的个数最少。问题分析:这是一个典型的动填规划问题。关键在于如何查找动态转移方程,我们假设前面的已经知道最小的个数dp[i],然后继续求解dp[i-j*j]+1这个数的最小值。class Solution {public: int numSqua...

2020-03-15 15:11:59 171

原创 Leetcode典型题解答和分析、归纳和汇总——T240(搜索二维矩阵II)

问题描述:编写一个高效算法来搜索矩阵中的目标值target。该矩阵有以下特性:(1)每行元素从左到右升序排列;(2)每列元素从上到下升序排列。问题分析:这是一个非常有特点的矩阵,由于是有序的,因此我们有如下思路:【1】从左下角开始搜索;【2】如果当前位置大于target,则说明target不可能在下方或者右方,将范围缩小到上方;【3】如果当前位置小于target...

2020-03-15 14:48:41 140

原创 Leetcode典型题解答和分析、归纳和汇总——T239(滑动窗口的最大值)

问题描述:给定一个数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧,你只可以看到在滑动窗口内的K个数字。滑动窗口每次向右只能移动一位,返回滑动窗口中的最大值。问题分析:如果是只要找某个区间内的最大值,那这个过程就比较简单,直接采用遍历的算法即可,但是这个题目要求我们找一个滑动窗口内内的最大值,这就需要我们进行分类讨论了。【1】如果上一个窗口的最大值在最左边...

2020-03-15 14:15:46 215

原创 Leetcode典型题解答和分析、归纳和汇总——T238(除自身外数组的乘积)

问题描述:给你一个长度为n的整型数组nums,其中n>1,返回输出数组output,其中outpu[i]是等于除nums[i]之外的其余元素的乘积。注意:时间复杂度为O(n),并且空间复杂度为O(1),不能使用除法!!!问题分析:我们可以用数学关系式:乘积 = 当前数左边的乘积*当前数右边的乘积。class Solution {public: vect...

2020-03-15 11:19:19 149

原创 Leetcode典型题解答和分析、归纳和汇总——T236(二叉树的最近公共祖先)

问题描述:给定一个二叉树,找到该树中两个指定节点的最近公共祖先。问题分析:我们可以将这两个节点的所处位置进行分类:p、q节点是否处于同一颗子树中。【1】从根节点进行遍历,递归向左右查询节点信息;【2】递归的终止条件:如果当前节点为空或者为p、q节点,则返回当前节点(1)递归遍历左右子树,如果左右子树查到节点都为非空,说明p、q分别在左右子树中,当前节点即为最近的公共...

2020-03-15 10:50:18 235

原创 Leetcode典型题解答和分析、归纳和汇总——T234(回文链表)

问题描述:请判断一个链表是否为回文链表。要求:采用时间复杂度为O(n)和空间复杂度为O(1)。问题分析:要时空间复杂度为常数级别,则必须采用常规的快慢指针方式,而且最多只能遍历一次。我们使用快慢指针的同时还翻转前半部分,然后与后半部分进行比较。class Solution{ public: bool isPalindrome(ListNode* head){ ...

2020-03-15 10:11:05 209

原创 Leetcode典型题解答和分析、归纳和汇总——T226(翻转二叉树)

问题描述:翻转一棵二叉树:问题描述:本题很容易想到的思路就是采用递归算法来求解。class Solution{ public: TreeNode *invertTree(TreeNode* root) { DFS(root); return root; } void DFS(TreeNode *root) { if(root)...

2020-03-15 09:48:15 104

原创 Leetcode典型题解答和分析、归纳和汇总——T221(最大正方形)

问题描述:在一个由0和1组成的二维矩阵中,找到只包含1的最大正方形,并返回其面积。问题分析:这是一道典型的数学类的题目。需要明确一点是考察动态规划方面的知识。【1】我们用o来初始化另一个矩阵dp,而且维数和原数组相同;【2】dp数组中的每个元素表示由1组成的最大正方形的边长,如dp[i][j] = 2,表示到(i,j)这个位置,可以组成最长正方形的边为2;【3】从初始位...

2020-03-15 09:32:21 384

原创 Leetcode典型题解答和分析、归纳和汇总——T215(数组中的第K个最大元素)

问题描述:在未排序的数组中找到第K个最大的元素。请注意,你需要找的是数组排序后的第K个最大元素,而不是第K个不同的元素。、问题分析:这里我们给出三种典型的解法:【1】使用库函数的方法:sort()class Solution{ public: int findKthLargest(vector<int>& nums, int k) { ...

2020-03-14 23:03:09 82

原创 Leetcode典型题解答和分析、归纳和汇总——T208(实现Trie前缀树)

问题描述:实现一个Trie前缀树,包含insert、search和startsWith这三个操作。问题分析:这类的题目与堆栈的最小元素查找类似,将所有功能进行集中处理。首先我们需要明确一下trie树的基本概念:它又称为:字典树、前缀树、单词查找树等。其基本数据结构定义为:与其他普通树的定义存在明显区别。最明显的差别就是Bool型变量来表征其节点是否为结束值,而Tri...

2020-03-14 22:03:54 142

原创 Leetcode典型题解答和分析、归纳和汇总——T207(课程表)

问题描述:你这个学期必修numCourse门课程,记为0到numCourse-1。在选修某些课程之前需要一些先修课程,例如,在想要修读课程0,先要完成课程1,我们用一个匹配来表示他们:[0,1]。给定课程总数以及它们的先决条件,请判断是否可以完成所有课程的学习。问题分析:首先对于这类问题,我们需要采用一种新的数据结构来表征:AOE(Active on Edge)网,是一种有向无环图...

2020-03-14 21:30:59 152

原创 Leetcode典型题解答和分析、归纳和汇总——T206(反转链表)

问题描述:反转一个单单链表。问题分析:【1】解法1:我们采用双指针的方式来求解。设置一个cur和post指针。当postt指针一直处于非空状态时,进行如下操作:(1)保存post的下一个节点;(2)将post指针的下一个状态指向cur;(3)将cur指针下移到post;(4)将post的指针下移到post->next; ListNode *cur =...

2020-03-14 11:50:44 91

原创 Leetcode典型题解答和分析、归纳和汇总——T200(岛屿数量)

问题描述:给定一个由"1"和"0"组成的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平或者吹着方向上相邻的陆地相连接而组成的。你可以假设网格的四个边都被水包围。问题分析:本题我们可以采用深度优先搜索算法来实现。 要把这个网格看成是岛屿,则必须从“1”数字开始进行搜索,因为只有陆地才有可能成为岛屿,然后再进行深度遍历,直到出现以下情况(1):越界;(2)全部遍历完成才进行...

2020-03-14 11:09:05 186

原创 Leetcode典型题解答和分析、归纳和汇总——T198(打家劫舍)

问题描述:你是一个专业的小偷,计划偷窃房屋内财产。每间房子内藏现金,影响你偷窃的唯一制约因素是防盗系统,如果两间相邻的房屋在统一晚上被小偷入侵,系统会自动报警。给定一个代表每个房屋存放金额的非负整数,计算在不触碰自动报警装置下,能够偷窃到的最大金额。问题分析:这个题目的关键在于如何跨区域寻找最大值。显然这是一个动态规划问题。【1】首先,我们需要定义子问题。就是求n间房子的总...

2020-03-14 10:41:04 153

原创 Leetcode典型题解答和分析、归纳和汇总——T169(多数元素)

问题描述:给定一个大小为n的数组,找到其中大多数的元素。大多数元素是指在数组中出现次数大于n/2的元素。问题分析:我们只要将这个数组进行排序,然后输出中间值即可。class Solution {public: int majorityElement(vector<int>& nums) { int len = nums.size(...

2020-03-14 10:10:08 88

原创 Leetcode典型题解答和分析、归纳和汇总——T160(相交链表)

问题描述:编写一个程序,找到两个单链表相交的起始节点。问题分析:本题我们采用双指针的方式来进行求解。即A链表一个指针,B链表一个指针,当两者相遇时,表示找到相交节点。一般而言两者链表程度是不一致的,于是我们采用“轮流替换”的方式。当A指针走完了一条链之后,再回到另外一条链的头部进行走两者经过一轮之后,最终会弥补了这个长度差值而相遇。/** * Definition for ...

2020-03-14 09:39:08 81

原创 Leetcode典型题解答和分析、归纳和汇总——T155(最小栈)

问题描述:设计一个支持push,top,pop操作,并能在常数时间内检索到最小元素的栈。问题分析:本题其实就是考察栈的基本操作:如入栈s.push(x),出栈s.pop(),查看栈顶元素值s.top()等,然后对于要查看的最小值,我们可以采用第二个最小值栈进行保存处理,每次入栈一个元素,我们就把最小的元素保存起来。class MinStack {public: st...

2020-03-12 11:38:36 118

原创 Leetcode典型题解答和分析、归纳和汇总——T153(寻找旋转排序数组中的最小值)

问题描述:假设按照升序排序的数组在预先设定的某个点上进行了旋转,请找出其中最小的数。问题分析:这个可以采用C++库函数直接完成任务,但是为了直观显示这这个查找过程,我们应该要充分利用这个数组的特性,使用二分查找,可以大大提升效率。class Solution {public: int findMin(vector<int>& nums) { ...

2020-03-12 11:26:16 142

原创 Leetcode典型题解答和分析、归纳和汇总——T152(乘积最大子序列)

问题描述:给定一个整数数组nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)问题分析:本题我们可以采用贪心算法或者动态规划算法。class Solution{ public: int maxProduct(vector<int>& nums){ if(nums.empty()) return 0; if(nums.size(...

2020-03-12 11:19:15 105

原创 Leetcode典型题解答和分析、归纳和汇总——T151(翻转字符串里面的单词)

问题描述:给定一个字符串,逐个翻转字符串里面的单词。问题分析:本题我们主要采用反转的思路。【1】定位到单词左右两边的第一个非空字母上(left、right);【2】采用反转函数reverse将整个字符串所有字母调转顺序;【3】然后对字符串中的逐个单词进行逆序调整;【4】最后去除掉字符串中多余的空字符。class Solution {public: v...

2020-03-12 11:06:40 135

原创 Leetcode典型题解答和分析、归纳和汇总——T147(对链表进行插入排序)

问题描述:对链表进行插入排序:【1】插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。【2】每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。【3】重复直到所有输入数据插入完为止。问题分析:本题考察的是插入排序,只是其基本的数据结构为:链表!!我们非常熟悉数组类型的数据,但是这种带指针类型的数据存在一些...

2020-03-11 21:22:10 97

原创 Leetcode典型题解答和分析、归纳和汇总——T146(LRU缓存机制)

问题描述:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最...

2020-03-11 20:57:31 111

原创 Leetcode典型题解答和分析、归纳和汇总——T145(二叉树的后序遍历)

问题描述:给定一个二叉树,返回它的后序遍历。问题分析:这个与二叉树的前序遍历一样,但是顺序要改为左->右->头节点的顺序。这里我们采用迭代算法来求解。主要是采用数据结构中的“栈”的思想。具体的操作如下:我们先将根节点入栈,然后进行如下循环:(1)查看栈顶元素top,(2)如果top有左节点,则把左节点入栈;(3)如果top没有左节点,则把右节点入栈‘...

2020-03-11 20:25:20 135

原创 Leetcode典型题解答和分析、归纳和汇总——T144(二叉树的前序遍历)

问题描述:给定一个二叉树,返回它的前序遍历。注意:初级版是采用递归算法,进阶版是迭代算法。问题分析:我们可以采用递归算法:构造一个helper()函数。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * Tr...

2020-03-11 19:40:32 105

原创 Leetcode典型题解答和分析、归纳和汇总——T143(重排链表)

问题描述:问题分析:这是一个非常有意思的排序问题,相当于是“强弱搭配”游戏,第一个与最后一个,倒数第二个和顺数第二个搭配起来。于是我们可以考虑采用双指针的方式进行递归链表重新连接。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *nex...

2020-03-11 17:52:53 113

原创 Leetcode典型题解答和分析、归纳和汇总——T142(环链表II)

问题描述:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。问题分析:本题在前一题的基础上,增加了关于位置的定义,除了采用双指针可以找到环之外,还需要使用快慢双指针确定环起点。...

2020-03-11 17:01:23 100

原创 Leetcode典型题解答和分析、归纳和汇总——T141(环形链表)

问题描述:给定一个链表,请判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾链接到链表中的位置(索引从0开始),如果pos是-1,则在链表中没有环。问题分析:本题我们可以采用快慢指针来进行求解。假设快指针是慢指针的1倍速度,那么如果成环的话,肯定会在某一次遍历之后出现fast = slow的情况。于是就说这个链表是形成了环。/** * Def...

2020-03-11 11:04:26 87

空空如也

空空如也

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

TA关注的人

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