1 加奔

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 17w+

LeetCode:无重复字符的最长子串(C++)

题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。思路:滑窗法:使用哈希存放字符出现的次数右端点开始向右遍历,若当前遍历的字符在窗口内...

2020-03-21 19:30:20

LeetCode:最长回文子串(C++)

题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例1输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案思路:动态规划:当 i == j,dp[i][j]是回文子串(单字符都是回文子串);当j - i < 3,只要s[i] == s[j],则dp[i][j]是回文子串(如 aa,aba),否则...

2020-03-21 19:06:51

Leetcode:两数相加(C++)

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。思路:1.相加的过程中可能存在进位的操作,所以需要采用一个变量carry来记录进位的情况,初始化carry = 0;2.因为链表...

2020-03-08 21:42:38

剑指offer:字符串的排列(C++)

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。**思路:**递归方法使用交换的的思路,我们可以将字符串看成两部分,第一个字符和后面的字串,将第一个字符和后面的每一元素互换,...

2020-03-03 09:49:44

剑指offer:二叉搜索树与双向链表(C++)

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路: 中序遍历二叉搜索树即为有序的序列,再递归建立双向链表即可。C++/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) ...

2020-03-02 20:33:25

剑指offer:复杂链表的复制(C++)

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路:拷贝一个带有random指针的链表。首先想到的便是,复制原链表的的每一个节点,并用next连接起来,在遍历原链表的时候,将原节点和新复制的节点的映射存进map中...

2020-03-02 19:51:23

剑指offer:二叉树中和为某一值的路径(C++)

题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)C++/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNo...

2020-03-01 23:52:10

剑指offer:二叉搜索树的后序遍历序列(C++)

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路: 二叉树的后序遍历也就是先访问左子树,再访问右子树,最后访问根节点,所以不难发现,所给的数组最后一个元素一定是二叉搜索树的根节点,而如果数组是二叉搜索树的后续遍历的话,就一定会根据数值划分两部分,左边是根节点的左子树,剩下的部分则是根节点的...

2020-03-01 22:40:03

剑指offer:从上往下打印二叉树(C++)

题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路: 用队列实现,先将根结点入队,依次入队该结点的左右结点,再依次出队打印即可。C++/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL...

2020-03-01 22:20:53

剑指offer:栈的压入、弹出序列(C++)

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)**思路:**建立一个临时栈,每次将pushV中的数值push进栈时,判断栈顶值与...

2020-03-01 22:06:20

剑指offer:包含min函数的栈(C++)

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。思路: 建立两个栈s1和s2。s1用来push进所有的value,而s2则用来push进当前的最小值。当s2为空时,两个栈同时push进value;当s2不为空时,s1则push进该val...

2020-03-01 20:26:10

剑指offer:顺时针打印矩阵(C++)

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路: 定位左上结点和右下结点,分成四个部分打印,从左到右、从上到下、从右到左、从下到上,每次打印完则去掉当前行/...

2020-03-01 19:06:05

剑指offer:二叉树的镜像(C++)

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:思路: 递归地交换左右结点。C++/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/...

2020-03-01 16:41:01

剑指offer:树的子结构(C++)

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路: 主函数递归找到相同的根节点,子函数递归判断是否完全相同。C++/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), ...

2020-03-01 16:22:27

剑指offer:合并两个排序的链表(C++)

题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路一: 递归。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: Li...

2020-03-01 15:21:16

剑指offer:反转链表(C++)

题目描述输入一个链表,反转链表后,输出新链表的表头。思路: 设置三个指针,一个指向上一个结点,一个指向当前结点,一个指向下一个结点。C++/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {pu...

2020-03-01 14:58:32

剑指offer:链表中倒数第k个结点(C++)

题目描述输入一个链表,输出该链表中倒数第k个结点。思路: 总长度减去倒数第k个位置即为链表中倒数第k个结点的位置。这里的倒数第k个,下标是从1开始。C++/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solut...

2020-03-01 14:34:49

剑指offer:二进制中1的个数(C++/Python)

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路: 只需要将n与1进行相与运算,看结果是不是1,然后再将1左移,再循环上述步骤。C++class Solution {public: int NumberOf1(int n) { unsigned int flag = 1; int count = 0; ...

2020-03-01 13:46:47

剑指offer:矩形覆盖(C++/Python)

题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?比如n=3时,23的矩形块有3种覆盖方法:思路: 所得递推公式和跳台阶问题一样,代码也相同C++class Solution {public: int rectCover(int number) { if (number ==...

2020-03-01 13:23:24

剑指offer:跳台阶(C++)

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路: 例如,跳上一个6级台阶台阶,有多少种跳法;由于青蛙一次可以跳两阶,也可以跳一阶,所以我们可以分成两个情况 1、青蛙最后一次跳了两阶,问题变成了“跳上一个4级台阶台阶,有多少种跳法” 2、青蛙最后一次跳了一阶,问题变成了“跳上一个5级台阶台阶,有多...

2020-03-01 11:37:40

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。