随机刷
白帽子hhh
这个作者很懒,什么都没留下…
展开
-
把字符串转换成整数
题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0分析:注意以下几方面(1)+-号处理(2...原创 2019-05-20 10:59:57 · 199 阅读 · 0 评论 -
栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)分析:class Solution {public: bool...原创 2019-06-17 15:24:06 · 92 阅读 · 0 评论 -
在每个树行中找最大值
题目:您需要在二叉树的每一行中找到最大的值。示例:输入: 1 / \ 3 2 / \ \ 5 3 9输出: [1, 3, 9]分析:借助队列,将每一层的的节点以及孩子放在一个vector中,孩子永远放在当前节点的下一层,然后求出每一个vector的最大值class ...原创 2019-06-21 14:57:48 · 212 阅读 · 0 评论 -
N叉树的层序遍历
题目:给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个3叉树:返回其层序遍历:[ [1], [3,2,4], [5,6]]分析:借助队列,队列中存放当前节点以及当前节点的层数,当它出来的时候,将该节点对应的值放在对应层,并且将其所有的孩子带进去,并且层数放的是下一层,为出来往vector中放的时候能...原创 2019-06-21 15:12:53 · 319 阅读 · 0 评论 -
二叉树的前序遍历、中序遍历、后续遍历(非递归实现)
题目:二叉树的前序遍历(非递归)分析:1.访问所有左路结点,并且入栈2.取出栈顶结点的右子树,如果它不为空就模拟递归,即将其赋给cur上去(即以该节点访问所有左路结点...),否则就取下一个栈顶元素3.直到当前结点为空(栈顶右子树),并且栈为空说明所有元素已访问过class Solution {public: vector<int> preorde...原创 2019-06-17 17:01:58 · 4215 阅读 · 0 评论 -
复制带随机指针的链表
题目:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。示例:输入:{"$id":"1","next":{"$id":"2","next":null,"random":{"$ref":"2"},"val":2},"random":{"$ref":"2"},"val":1}解释:节点 1 的值是 1,它的...原创 2019-06-25 14:39:52 · 122 阅读 · 0 评论 -
岛屿数量
题目:给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3分析:用队列实现“广度优先”...原创 2019-06-22 17:01:35 · 606 阅读 · 0 评论 -
朋友圈
题目:班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋...原创 2019-06-22 17:03:08 · 313 阅读 · 0 评论 -
二叉树的最近公共祖先
题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root...原创 2019-06-18 14:43:11 · 447 阅读 · 0 评论 -
并查集
1、并查集的概念并查集是由一个数组、两个函数(查找一个数的根、合并路线)组成,常用来解决一些不相交集合的合并与查找问题。2.并查集实现原理(下文给的图的n都取值为10)(1)元素初始化给定n个元素组成的一个数组,数组的下标依次为0,1,2,...,n-1;将数组中的每一个数都初始化为-1;UnionFondSet(int n){ v.resize(n,-1);...原创 2019-06-22 20:04:54 · 1732 阅读 · 0 评论 -
移除链表元素
题目:删除链表中等于给定值val的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5分析:先在头结点前面加一个节点(防止第一个节点就是要删除的,则要换头),然后用一个指针保留每一个节点的前一个节点,当找到要删的节点,直接让前一个指向后一个即可...原创 2019-06-24 10:52:41 · 114 阅读 · 0 评论 -
反转链表
题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL方法(1):利用三个指针n1,n2,n3,分别指向n2的指向(指向n1),n3是负责往后,n2走完后n1就是新头。需要注意的是当链表没有节点或者只有一个节点时,直接返回原链表即可。ListN...原创 2019-06-24 12:06:05 · 107 阅读 · 0 评论 -
链表的中间结点
题目:给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val =...原创 2019-06-24 13:33:37 · 118 阅读 · 0 评论 -
链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。分析:也是用两个指针来实现先让first指针从头开始先走k步,然后second指针从头开始走,这时让两个指针一起走,当first走到尾时,second就走到倒数第k个节点。需要注意是frist先走k步时,有可能k大于ListNode* FindKthToTail(ListNode* pListHead, unsigned int...原创 2019-06-24 14:48:14 · 132 阅读 · 0 评论 -
合并两个有序链表
题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4分析:先判断有没有其中一个 空的,如果其中一个是空的则返回另一个;否则先找一个小的做头(这时候将头保存下来)然后将以此比较两个链表的节点值...原创 2019-06-24 15:09:22 · 123 阅读 · 0 评论 -
链表分割
题目:分析:方法(1):遍历一次先用x构建两个头节点first和second,遍历原链表然后遇到小于x的就尾插在first后面,遇到大于等于x的就尾插在second后面(即现在有两个独立的链表),当原链表的节点遍历完之后, 将first的尾与second的头连起来(注意找去掉我们当初构建的x节点),并且将second的next域置空,因为它现在是真实的尾节点,最后返回first的...原创 2019-06-24 15:52:18 · 164 阅读 · 0 评论 -
删除链表中重复的结点
题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5分析:先伪造一个头节点插在原链表的头上(防止头结点要被删除的情况),然后接下来如果当前节点和下一个节点相同,则要循环找出后续所有与当前值相同的节点,然后让p...原创 2019-06-24 16:50:55 · 144 阅读 · 0 评论 -
最小栈
题目:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。pop()-- 删除栈顶的元素。top()-- 获取栈顶元素。getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack...原创 2019-06-17 15:17:15 · 108 阅读 · 0 评论 -
环形链表 II
题目:给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node ind...原创 2019-06-25 08:28:00 · 170 阅读 · 0 评论 -
环形链表
题目:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2], pos = ...原创 2019-06-25 07:47:01 · 712 阅读 · 0 评论 -
字符串相加
题目:给定两个字符串形式的非负整数num1和num2,计算它们的和。注意:num1和num2的长度都小于 5100. num1和num2都只包含数字0-9. num1和num2都不包含任何前导零。 你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式分析:注意几个方面(1)循环中两个字符串都停止才停止(2)每次取字符串的数...原创 2019-05-20 11:03:19 · 1091 阅读 · 0 评论 -
反转字符串
题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是ASCII码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"...原创 2019-05-20 15:27:11 · 121 阅读 · 0 评论 -
字符串中的第一个唯一字符
题目:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2.分析:哈希思路,将每个元素出现的次数存起来,然后找第一个出现次数是1的int firstUniqChar(string s) { int count[256]={...原创 2019-05-20 15:33:36 · 220 阅读 · 0 评论 -
字符串最后一个单词的长度
题目:题目描述计算字符串最后一个单词的长度,单词以空格隔开。输入描述:一行字符串,非空,长度小于5000。输出描述:整数N,最后一个单词的长度。示例1输入hello world输出5分析:从后往前找空格,然后根据字符串长度和这个空格下标,计算最后一个单词长度,注意find找不到返回string::npos#include <i...原创 2019-05-20 15:59:22 · 900 阅读 · 0 评论 -
验证回文串
题目:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false分析:注意题目要求只考虑字母和数字字符,因此要用isalnum,...原创 2019-05-21 09:34:29 · 146 阅读 · 0 评论 -
反转字符串
题目:给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。示例:输入: s = "abcdefg", k = 2输出: "bacdfeg"要求:该字符串只包含小写的英文字母。 给定字...原创 2019-05-21 10:41:40 · 183 阅读 · 0 评论 -
反转字符串中的单词
题目:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例1:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc"注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。string reverseWords(string ...原创 2019-05-21 11:25:35 · 819 阅读 · 0 评论 -
求1+2+3+...+n
题目:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。方法(1):利用两个静态成员变量,调用n次构造函数class SUM{private: static int i; static int sum;public: //构造函数 SUM() {...原创 2019-05-22 15:39:15 · 263 阅读 · 0 评论 -
计算日期到天数转换
题目:根据输入的日期,计算是这一年的第几天。。详细描述:输入某年某月某日,判断这一天是这一年的第几天?。分析:比如2019-5-22日,先算出这一年前4个月的天数,再加上5月剩余的天数,另外注意大于2月时考虑闰年要多加一天#include <iostream>using namespace std;int main(){ //输入一个日期,判...原创 2019-05-22 15:53:31 · 480 阅读 · 0 评论 -
字符串相乘
题目:分析:先不进位将对应位相乘,然后从后往前将进位加到前一位中。string multiply(string num1, string num2) { int len1 = num1.size(); int len2 = num2.size(); vector<int> v(len1+len2); ...原创 2019-05-23 09:20:05 · 124 阅读 · 0 评论 -
二叉树的层平均值
题目:给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.示例 1:输入: 3 / \ 9 20 / \ 15 7输出: [3, 14.5, 11]解释:第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].注意:节点值的范围在32位有符号整数范围内。分析:借助队列...原创 2019-06-18 20:39:10 · 498 阅读 · 0 评论 -
前k高频元素
题目:给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的k总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) ,n...原创 2019-06-20 20:18:29 · 131 阅读 · 0 评论 -
前k个高频单词
题目:给一非空的单词列表,返回前k个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2输出: ["i", "love"]解析: "i" 和 "love" 为出现次数最多的两个单词,均为...原创 2019-06-20 21:11:41 · 720 阅读 · 2 评论 -
逆波兰表达式求值
题目:根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + ...原创 2019-06-17 08:44:10 · 423 阅读 · 0 评论 -
二叉树镜像
题目:题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11...原创 2019-06-21 14:10:52 · 101 阅读 · 0 评论 -
相交链表
题目:编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的...原创 2019-06-25 07:39:15 · 477 阅读 · 0 评论 -
链表的回文结构
题目:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。测试样例:1->2->2->1返回:true分析:用快慢指针找到中间,再反转后半部分,将翻转后的后半部分和前半部分进行一一比较其元素,只要有一个不...原创 2019-06-24 17:42:35 · 126 阅读 · 0 评论