- 博客(12)
- 收藏
- 关注
原创 JZ20 包含min函数的栈
JZ20 包含min函数的栈JZ20 包含min函数的栈问题描述问题分析解法JZ20 包含min函数的栈问题描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数,并且调用 min函数、push函数 及 pop函数 的时间复杂度都是 O(1)push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素示例:输入: [“PSH-1”,“PSH2”,“MIN”,“TOP”,“POP”,“PSH1”,“T
2021-06-30 18:27:43
108
原创 JZ30 连续子数组的最大和
JZ30 连续子数组的最大和JZ30 连续子数组的最大和问题描述问题分析解法JZ30 连续子数组的最大和问题描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).输入:[1,-2,3,10,-4,7,2,-5]返回值:18说明:输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。问题分析先假设最大值max就是arry[0],建
2021-06-30 17:28:27
97
原创 JZ28 数组中出现次数超过一半的数字
JZ28 数组中出现次数超过一半的数字JZ28 数组中出现次数超过一半的数字问题描述问题分析解法一解法二解法三JZ28 数组中出现次数超过一半的数字问题描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000问题分析我首先想到的是用hash。先遍历一遍数组,在map中
2021-06-30 16:29:17
94
原创 JZ34 第一个只出现一次的字符
JZ34 第一个只出现一次的字符JZ34 第一个只出现一次的字符问题描述问题分析解法一(时间复杂度:O(n^2))解法二JZ34 第一个只出现一次的字符问题描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)输入:“google”返回值:4问题分析一个字符串要找某个特定的字符,就应该化成字符数组。用每一个字符和其他的字符进行比较,只要出现重复就跳出循环比较下一个
2021-06-29 22:12:59
133
原创 JZ36 两个链表的第一个公共结点
JZ36 两个链表的第一个公共结点JZ36 两个链表的第一个公共结点问题描述问题分析解法JZ36 两个链表的第一个公共结点问题描述输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)输入:{1,2,3},{4,5},{6,7}返回值:{6,7}说明:第一个参数{1,2,3}代表是第一个链表非公共部分,第二个参数{4,5}代表是第二个链表非公共部分,最后的{6,7}表示的是2个链表的公共部分。这3个参数最后在后
2021-06-29 20:41:15
97
原创 JZ38 二叉树的深度
JZ38 二叉树的深度JZ38 二叉树的深度问题描述问题分析解法JZ38 二叉树的深度问题描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。问题分析树的深度是从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径中最长路径的长度。传入某节点,调用该方法,返回的应该是以传入节点为根节点的树的深度,而树的深度,肯定和左右子树深度有关,所以进入这个方法后,就包含了左右子树的深度(而要得到左右子树的深度,肯定又是以左右
2021-06-29 19:36:47
117
原创 JZ39 平衡二叉树
JZ39 平衡二叉树JZ39 平衡二叉树问题描述JZ39 平衡二叉树问题描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。注:我们约定空树是平衡二叉树。例:输入:{1,2,3,4,5,6,7}返回值:true...
2021-06-29 18:54:14
76
原创 JZ45 扑克牌顺子
JZ45 扑克牌顺子JZ45 扑克牌顺子问题描述问题分析解法JZ45 扑克牌顺子问题描述现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。有如下规则:A为1,J为11,Q为12,K为13,A不能视为14大、小王为 0,0可以看作任意牌如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。例如:给出数据[6,0,2,0,4]中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4]这样这五张牌在[2,6]区间连续,输出tru
2021-06-28 16:20:01
275
原创 JZ48 不用加减乘除做加法
JZ48 不用加减乘除做加法JZ48 不用加减乘除做加法问题描述问题分析解法JZ48 不用加减乘除做加法问题描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。问题分析不用+、-、*、/四则运算符号,那么就可以用位运算符。所以考的就是位运算的应用。位运算符:左移 <<右移 >>按位与 &按位或 |按位异或 ^补码:计算机存放整数n是以补码的形式存放的若n为正数,补码=原码=反码若n为负数,补码=原码的反码+1
2021-06-28 15:17:43
74
原创 JZ50 数组中重复的数字
JZ50 数组中重复的数字JZ50 数组中重复的数字问题描述问题分析解法一解法二(优化)写在最后JZ50 数组中重复的数字问题描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1问题分析对于这道题目,我开始有点疑惑。要求输出的结果是任意一个重复的数字,那么如果有
2021-06-27 16:08:48
88
原创 JZ51 构建乘积数组
JZ51 构建乘积数组JZ51 构建乘积数组问题描述问题分析解法一(时间复杂度O(n^2))解法二(时间复杂度O(n))JZ51 构建乘积数组问题描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意
2021-06-27 15:12:35
121
原创 JZ62 二叉搜索树的第k个结点
二叉搜索树的第k个结点问题描述什么是二叉搜索树二叉搜索树的特点问题分析解法一(数组)解法二(栈)问题描述给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。例如: {5,3,7,2,4,6,8}中,按结点数值大小顺序第3小结点的值为4。什么是二叉搜索树二叉搜索树也叫二叉查找树、二叉排序数。它或者是一颗空树,或者是具有以下性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值,若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值, 它的左、右子树也分别是二叉搜索
2021-06-26 19:36:55
111
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人