自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 资源 (1)
  • 问答 (5)
  • 收藏
  • 关注

原创 移除元素

题目:给定一个数组 nums和一个值 val,你需要原地移除所有数值等于val的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums...

2019-10-14 22:26:15 185

原创 删除排序链表中的重复元素

题目:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3思路:使用双指针法,p1指向一个节点,p2指向下一个和p1不重复的节点,将p1的next指向p2,p1和p2之间重复的节点即被删除,重复这...

2019-10-13 17:39:36 282

原创 子集 II

题目:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]思路:从数组nums中取子集,子集长度从0到len(nums长度)。在取不同长度子集时都对应一个长度为k(0-len)的数组...

2019-09-25 11:07:37 291

原创 组合

题目:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]思路:从n个数中取k个数,首先创建一个大小为k的数组tmp,之后依次向tmp[0]到tmp[k-1]赋值,每次赋值完一遍就保存一次tmp,...

2019-09-24 11:06:11 123

原创 全排列 II

题目:给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]思路:在全排列的基础上加入一个去重判断。如果待交换的数字和被换位置的数字相同则跳过不交换,因为如果交换了那么就会产生重复序列。//结果集 vector<vector<int>> res...

2019-09-22 22:50:39 258

原创 组合总和 II

题目:给定一个数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例1:输入: candidates =[10,1,2,7,6,1,5], target =8,所...

2019-09-22 21:00:18 88

原创 组合总和

题目:给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。解集不能包含重复的组合。示例1:输入: candidates = [2,3,6,7], target = 7,所求解...

2019-09-16 19:05:49 112

原创 填充每个节点的下一个右侧节点指针 II

题目:给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有next 指针都被设置为 NULL。示例:输入:{"$id":"1",...

2019-09-14 16:11:59 180

原创 搜索插入位置

题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出:...

2019-09-11 12:03:19 120

原创 二叉树展开为链表

题目:给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1\ 2 \ 3 \ 4 \ 5 \ 6思路:先对树进行先序遍历,之后根...

2019-09-10 19:01:37 104

原创 路径总和合集(I,II)

路径总和I题目:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 1...

2019-09-07 14:20:03 136

原创 二叉树的最小深度

题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.思路:实际上就是求二叉树的深度,只不过在比较左右子树长度的时候要选取长...

2019-09-07 11:32:29 110

原创 中级算法之排序和搜索

总结:早某些问题的解决过程中,对问题中的数据进行排序之后会使问题变得简单,例如题目2,题目3,题目6,在涉及到排序的问题的时候,我认为还是不要轻易的自己去写排序函数,因为一来这样会比较耗费时间,二来自己选择的排序方法可能在面对不同数据量的排序时无法总是保持一个很高的效率,所以还是优先使用STL提供的sort函数。sort函数在数据量比较大的时候会采用快速排序,用递归来实现;在快排过程中一旦分段的...

2019-09-03 17:49:25 186

原创 寻找旋转排序数组中的最小值

题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7] 可能变为[4,5,6,7,0,1,2])。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0思路:根据数组的特点使用二分查找,先将l指向n...

2019-09-01 15:05:14 143

原创 平衡二叉树

题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null...

2019-08-29 22:17:57 84

原创 二叉树的层次遍历 II

题目:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]思路:树的层次遍历,只需要...

2019-08-28 21:07:50 115

原创 相同的树

题目:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 ...

2019-08-28 21:05:08 94

原创 从中序与后序遍历序列构造二叉树

题目:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder =[9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7思路:后序数组尾元素是根节点,根据根节点可以在中序数组中找...

2019-08-28 21:02:13 706

原创 中级算法之动态规划

总结:中级算法练习中的动态规划问题,相较于初级算法练习来讲,寻找转态转移方程的时候会相对来讲抽象一点。但是寻找转态转移方程的时候要把握两点:一,是由题目总问题去寻找子问题,例如题目1,题目中问能否到达最后一个位置,我们先将这个总问题进行转化为在这个数组中可以跳跃的最长距离是否大于数组的长度,这样我们的子问题就是去寻找截止到数组某个元素时可以跳跃的最长距离;例如题目3,题目问金额为amount时所...

2019-08-28 11:26:23 143

原创 中级之回溯算法

总结:回溯算法实际上是一个类似枚举的搜索尝试过程,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,其特点就是走不通就退回再选另一条路走。在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则...

2019-08-26 20:23:23 178

原创 中级算法之数组和字符串

总结:中级算法中的数组和字符串问题中依然沿用了初级算法问题中的双指针法,例如题目1;并且加入了一些数组中动态规划的问题,例如题目4,题目5,题目6。题目1:三数之和给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 ...

2019-08-25 17:41:57 203

原创 中级算法之链表

总结:链表的中级算法实际上就是链表的基础操作的实际应用。题目1涉及到链表的遍历,节点的创建及添加;题目2涉及链表的遍历和链表节点的移位;题目3涉及到链表的遍历,当然题目3也可以使用快慢指针来解决问题,我们可以将链表1头尾相连成为环,之后用快慢指针遍历链表2,判断其有没有环,若有环则两链表相连,反之不相连。这种方法之后二刷的时候更新。题目1:两数相加给出两个 非空 的链表用来表示两个非负...

2019-08-22 19:52:40 133

原创 初级算法之树

总结:解决和树有关的问题的时候,一般用到的方法有两种:深度优先搜索(DFS)和广度优先搜索(BFS)。广度优先搜索实质上就是层次遍历,每遍历完一层的所有节点才开始遍历下一层节点;深度优先搜索则是按分支去遍历树,一条分支遍历完再遍历下一条分支,深度优先搜索一般是用递归来实现。下面题目中题目3和题目4可以用BFS解决;题目1,题目2,题目3,题目5可以用DFS解决。题目1:二叉树的最大深度...

2019-06-04 01:11:34 103

原创 初级算法之其他

总结:这六道题目中,题目4是找寻规律,题目5是栈的应用,其余四道均是使用位运算来解决问题。关于位运算在算法中的一些应用,可以参考之前总结过的一篇文章《程序中位运算的妙用》,有时在程序设计加入一些位运算可以有效提升程序运行的速度,优化算法,位运算并不是鸡肋,要能够合理应用。题目1:位1的个数编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重...

2019-06-02 17:20:53 86

原创 初级算法之设计问题

总结:设计这种要实现某些特殊操作的类实质上就是各种数据结构的综合应用,在原有数据结构内部添加一些额外的属性或者其他数据结构来辅助完成操作。所以要解决这样的问题要对常见的数据结构的构成和操作有清楚地认识,并能灵活应用这些数据结构来解决问题。题目1:Shuffle an Array打乱一个没有重复元素的数组。示例:// 以数字集合 1, 2 和 3 初始化数组。int[] num...

2019-05-28 17:19:02 143

原创 初级算法之动态规划

总结:动态规划着重解决最优化问题,例如下列题目中给出的最大金额,最大子序和等等。动态规划关键在于将一个问题分解为子问题,通过递推方程自底向上进而得到整个问题的最优解。例如题目1和题目4中将问题分解为了到达i元素时可以获得的最大值,然后一步一步根据递推式求得到达n元素时可以获得的最大值;又例如题目2和题目3将问题分解为了以i元素结尾时可以获得的最大值,然后通过比较这些值的大小来得到最终结果。所以总...

2019-05-27 00:24:54 148

原创 初级算法之字符串

总结:字符串其实可以看做是字符数组,所以处理字符串实质上就是处理数组问题,在这个模块中可以看到仍有很多题目运用到了数组的经典办法:双指针法,例如题目1,题目2,题目5;还有比较重要的一点是当字符串和数字进行转化的时候要注意整型越界的问题,例如题目2,题目6。题目1:反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数...

2019-05-21 00:13:59 153

原创 初级算法之数学

总结:编程中的初级数学问题更多考察的是数学方面的知识,主要是是完成对一些巧妙的数学方法的代码转换,例如题目2,题目3;以及对一定数学规则的算法模拟,例如题目1,题目4。这类问题难度不大,主要是要去从数学角度进行思考寻找解法。题目1:Fizz Buzz写一个程序,输出从 1 到 n 数字的字符串表示。1. 如果 n 是3的倍数,输出“Fizz”;2. 如果 n 是5的倍数,输出“...

2019-05-15 00:18:08 100

原创 初级算法之排序和搜索

总结:这两道题目中第一道题目就是归并排序的一个过程,第二道题目则是对二分搜索的转化应用。在搜索类题目中,尤其是规定了时间复杂度为O(logn)的题目,要考虑二分搜索。掌握二分搜索会大大减小搜索过程的时间复杂度。题目1:合并两个有序数组给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:1.初始化 num...

2019-04-26 00:44:07 110

原创 初级算法之链表

总结:链表问题除了添加节点,删除节点,查找节点等常规操作,还要关注一种方法:双指针法,双指针的应用例如题目4;而在双指针法中又可以细化出一种方法:快慢指针,题目5,题目6均是快慢指针的实际应用,而题目2其实也可以使用快慢指针去解决,所以快慢指针是一种很重要的解决链表问题的方法。题目1:删除链表中的节点请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节...

2019-04-24 16:40:04 124

原创 初级算法之数组

总结:数组问题在初级算法层次我认为要关注两种基本方法:数组排序和双指针,有些问题在对数组排序之后会让问题变得简单,例如题目4,题目9。双指针的应用例如题目8,题目9,题目11。而题目9:两数之和则是排序和双指针的综合应用。题目1:从排序数组中删除重复项给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原...

2019-04-20 17:16:05 518

原创 Implement strStr()

题目描述:https://leetcode-cn.com/problems/implement-strstr/思路:字符串匹配,在源字串中找到和目标字串开头字母相等的位置,再依次向后比较,如果剩余的字母也相同,则返回该位置。就否则继续向后重复该操作,直到源字串完。#include&lt;cstdio&gt;#include&lt;iostream&gt; #include&lt;...

2019-01-24 18:11:28 178

原创 Letter Case Permutation

题目描述:https://leetcode-cn.com/problems/letter-case-permutation/思路:将字符串的转化看作一个二叉树的遍历(如下图),但要注意一点,在数字节点上,不能进行分支,否则会产生重复的情况。                                                            #include&lt...

2019-01-14 21:16:23 198

原创 Reverse Integer

题目描述:https://leetcode-cn.com/problems/reverse-integer/思路:从原数中分离出各个位的数值,并且倒置即可。#include&lt;cstdio&gt;#include&lt;iostream&gt;#include&lt;math.h&gt;#include&lt;stdlib.h&gt;using namespace std...

2019-01-14 16:48:04 86

原创 Binary Watch

题目描述:https://leetcode-cn.com/problems/binary-watch/题目过长,就不多描述了,直接点链接即可。思路:列举m个小时灯亮,n个分钟灯亮的情况下的各种小时和分钟的值,并且排列组合即可。(m+n==num)#include&lt;cstdio&gt;#include&lt;iostream&gt;#include&lt;vector&g...

2019-01-13 22:09:06 181

原创 Two Sum

题目描述:Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the...

2019-01-13 16:17:21 111

原创 分解质因数

题目描述:将一个正整数分解质因数,例如90=2x3x3x5.思路:判断一个因数是否为质数,然后排列组合这些质数。#include&lt;cstdio&gt;#include&lt;stdlib.h&gt;//用来记录每个质因数的个数 int *count;//判断一个数是否为质数 bool check(int num){ for(int i=2;i&lt;num;i+...

2018-10-01 22:21:45 264

原创 Split Array into Fibonacci Sequence

题目描述:Given a string S of digits,such as S = "123456579",we can split it into a Fibonacci-likesequence [123, 456, 579].Formally, a Fibonacci-like sequence is a list F of non-negative integers such ...

2018-07-24 23:02:51 313

原创 Permutation Sequence

题目描述:The set [1,2,3,...,n] contains a total of n! unique permutations.By listing and labeling all of the permutations in order, we get the following sequence for n = 3:    "123"    "132"    "213"    "...

2018-07-13 18:46:32 126

原创 Word Search

题目描述:Given a 2D board and a word, find if the word exists in the grid.The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or verticall...

2018-07-11 12:34:44 212

空空如也

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

TA关注的人

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