练习
有空就多练
dream_one_day
dream will true
展开
-
和为S的连续正数序列(java)
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!由题目可知信息:所需结果为 d=1,项数n 的和为S的...原创 2020-03-14 16:12:22 · 274 阅读 · 0 评论 -
二叉树的镜像(Java)
之前一直不敢做二叉树的,感觉贼难,今天两分钟做出了,自己不敢相信????竟然这么简单。OMG!真不知道我之前是怎么想的。操作给定的二叉树,将其变换为源二叉树的镜像。什么是二叉树的镜像,你是不是还不清楚?上图????我们先来简化问题:1.只有根结点,不需要改变2.只有根结点,一个左孩子,一个右孩子,左右孩子交换即可3.多个结点,即左孩子和右孩子还有孩子结点,我们可以看出先是交换底层对应的左右孩子...原创 2020-03-10 10:07:14 · 268 阅读 · 0 评论 -
和为S的两个数
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。注意题目给出的信息:递增排序、两个数的乘积最小思路1.当数组为空,或者数组只有一个数时,很明显不符合题意,直接返回。2.虽然这个方法比较笨,遍历数组找到对应的被减数,当符合条件时,变更结果集。import java.util.ArrayList;import ...原创 2020-03-01 17:27:48 · 199 阅读 · 0 评论 -
扑克牌顺子(java)
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变...原创 2020-02-23 21:50:46 · 601 阅读 · 0 评论 -
从第一个字符串中,删除第二个字符串(Java)
题目描述:键盘输入两个字符串,从第一个字符串中,删除第二个字符串。例如输入:str1:hello,world! str2:world输出:hello,!思路:1.判断 str1 是否含有 str2,倘若含有才有后续,倘若没有直接输出 str1即可2.如果含有 str2 ,定位到 str2 在 str1 中的位置3.根据 str2 的长度来更新是 str1public voi...原创 2020-02-22 16:50:23 · 1296 阅读 · 0 评论 -
将字符串日期排序输出(Java)
题目描述:键盘输入多个日期,日期之间使用“,”隔开,由于输入的日期顺序可能是乱着的,你需要按照自然顺序输出已排序的日期import java.text.SimpleDateFormat;import java.util.Comparator;import java.util.Scanner;//自定义日期类,定义比较规则class myData { int year, mount...原创 2020-02-22 16:41:34 · 1878 阅读 · 0 评论 -
数组中出现次数超过一半的数字(Java)
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。也许下边代码不是最优解,但希望能给你提供一点思路因为数组元素和出现次数并不是相等的,所以可以使用key-value形式来处理元素,后续获取出 map 中 value 最大的对应的 key...原创 2020-02-19 11:36:04 · 542 阅读 · 0 评论 -
红黑树添加结点之后维护太容易了!!!
提到红黑树,你是不是头皮发麻,难搞哦????,别害怕,我来教你分分钟学会他我们先来看一下红黑树的定义:红黑树:1) 每个节点颜色属性非红即黑2) 根节点颜色一定是黑色的;3) 如果一个节点是红的,那么它的两儿子都是黑的;4) 对于任意节点而言,其到叶子节点的每条路径都包含相同数目的黑色节点数;(因为所有叶子节点都会回到 nil 哨兵结点,故本文忽略哨兵结点)根据上述定义,我们可以设置红黑树...原创 2020-02-05 21:59:29 · 888 阅读 · 0 评论 -
字符串转换成整数(Java)
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0思路1 判断字符串是否为空,如果为空直接返回02 由于可以输入符号,故需特殊处理字符串3 由于整数最小值的绝对值 > 最大值的绝对值,故需处理整数边界问题4...原创 2020-01-14 18:59:19 · 529 阅读 · 0 评论 -
分割链表(Java)
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。eg:测试用例。输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5-------------------------------...原创 2019-11-13 11:27:14 · 595 阅读 · 0 评论 -
两数相加(java)
题目描述:算法就像你在纸上计算两个数字的和那样,我们首先从最低有效位也就是列表 l1l1l1 和 l2l2l2 的表头开始相加。由于每位数字都应当处于 0…90 \ldots 90…9 的范围内,我们计算两个数字的和时可能会出现 “溢出”。例如,5+7=125 + 7 = 125+7=12。在这种情况下,我们会将当前位的数值设置为 222,并将进位 carry=1carry = 1carry=...原创 2019-10-26 12:25:28 · 1773 阅读 · 0 评论 -
两数求和Java
题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]一、暴力解法...原创 2019-10-22 17:19:39 · 323 阅读 · 0 评论 -
快排实现
时间复杂度:o(nlog2n)最优时间复杂度:o(nlog2n)空间复杂度:o(1)快排思想就是将数组分为两个部分,分别对两部分再次进行排序,使用快排对数组进行排序,其实就是将大数组转化成小数组,对小规模数组进行排序。因此为了防止数组越界,快排需要三个参数!!!因为快排是将数组分为两个部分,基准左边的元素都比基准小,基准右边的元素都比基准大。故有时候可能进行排序的只有基准的一边。快排是一...原创 2019-10-17 23:03:16 · 197 阅读 · 0 评论 -
寻找链表的环入口点+两个链表的相交结点(返回指定的结点值)
我们先来了解一下查找链表的环入口点常用的方法。即使用快慢指针来解决该问题public Entry loopEntry(){ if(headEntry == null || headEntry.next == null){ return null; } if(headEntry.next == headEntry) return headE...原创 2019-10-06 20:19:09 · 250 阅读 · 3 评论 -
移除链表元素(java)
删除链表中等于给定值 val 的所有节点。示例输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5第一次做力扣的题呀,还有点小迷。说一下解题思路叭????1.老规矩,判断输入的链表头节点值是否为空,如果为空,直接返回null或者头节点都行。2./** * Definition fo...原创 2019-09-05 21:56:59 · 571 阅读 · 0 评论 -
二叉搜索树的最近公共祖先(java)
题目描述:原创 2019-11-04 15:39:53 · 394 阅读 · 0 评论 -
通过& / ^实现整数的加减乘除
题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。我们可以先来观察一个计算式(都用二进制表示)8 : 1 0 0 07 : 0 1 1 1/---------------& : 0 0 0 0^ : 1 1 1 1/----------------8 : 1 0 0 0从上边简单的例子可以看出,可以通过简单的按位与操作,就可以达到...原创 2019-10-31 21:25:21 · 150 阅读 · 0 评论 -
两个链表的第一个公共结点(java)
输入两个链表,找出它们的第一个公共结点。这道题的解题思路:可能转进来的链表长短不一1.遍历链表得到链表长度。2.算出两个链表的长度差,定义跑长链表的结点,和跑短链表的结点3.同时向后跑,若两个结点的值相同,则表示已经找到了公共结点,此时跳出循环即可。如果链表的长度分别为 n 和 m 。时间复杂度:O(n+m)空间复杂度:O(1)class ListNode { int va...原创 2019-08-17 20:12:18 · 157 阅读 · 0 评论 -
树的子结构(java)
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)1.因为有输入值,故需判断输入的根结点是否为空,只有当两个结点都不为空时,才有判断的价值。2. (思想) 从根结点开始判断,先在树1中找到与树2根结点相同的位置,树1 中该结点对应的子节点,倘若子节点也相同,则树1 中存在子结构树2.3.在树1中找与树2的根结点一样的结点,此过程可以看作树1的遍历,故可...原创 2019-09-05 20:39:41 · 127 阅读 · 0 评论 -
反转链表(java)
反转链表输入一个链表,反转链表后,输出新链表的表头。在这里插入代码片我个人觉得这个从尾到头打印链表更值得研究,故这个代码不做解释啦!https://blog.csdn.net/dream_one_day/article/details/97032156...原创 2019-07-27 20:20:28 · 132 阅读 · 0 评论 -
数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。拿到这个题首先想到三种情况1.如果base为0怎么办?2.如果exponent为负数怎么办?3.如果base为负数要会有什么影响?public static double Power(double base, int exponent){ // 由于计算机内表示小数时都有...原创 2019-07-24 23:20:23 · 83 阅读 · 0 评论 -
删除链表中重复的结点(java)
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->51.链表为空,走人ヾ(•ω•`)o。2.因为是单向链表,故删除节点时,挂接的时候要定义一个前驱结点。3.判断遍历到的结点是否需要删除,如果不需要删除,直接往下遍历就好了4....原创 2019-08-21 10:30:38 · 560 阅读 · 2 评论 -
左旋转字符串(java)
叮叮好久没有做题了,今天做的事反转字符串原创 2019-08-15 20:55:59 · 233 阅读 · 0 评论 -
顺时针打印矩阵(java)
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.嗯?我自己的代码还通不过检查???import java.util.ArrayList;public class Solut...原创 2019-08-03 20:56:16 · 144 阅读 · 0 评论 -
从上往下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。看到题目分两种情况:1.如果是空树,该怎么返回值?2.如果不是空树,要怎么按层遍历?按照题目描述:从上往下,从左往右,很显然这个描述的先入先出,故想到队列,但题目要求输出的是ArrayList。故先让结点入队列,将出栈结点的值入ArrayList中.。记得将出栈的结点保存到临时变量,让问题规模依次减小。 public Arra...原创 2019-07-25 18:49:56 · 80 阅读 · 0 评论 -
矩形覆盖(java)
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?非递归思想public class Solution { public int RectCover(int target) { if(target < 3){ return target; } ...原创 2019-08-02 20:13:19 · 139 阅读 · 0 评论 -
青蛙跳台阶(java)
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。刚开始是知道这个是斐波那契数列的变形,可是老想不通这个逻辑,总觉得n级台阶,原创 2019-08-02 19:43:54 · 1588 阅读 · 4 评论 -
剑指offer之栈的压入、弹出序列( java)
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)在这里插入代码片...原创 2019-07-29 20:29:35 · 149 阅读 · 0 评论 -
合并两个有序链表(java)
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。想法☁:1.题目告诉两个链表,那你首先应想到,如果给你的两个链表的其中一个是空的,则返回另外一个链表节点头就好了。2.新定义一个链表的头节点,该结点就是要返回的结点哦。3.定义三个指针,用来跑链表。4.如果整个循环跳出,则表示其中一个链表为空,则把新链表尾节点的next域设置为不为空链表的指针就原创 2019-07-29 17:55:43 · 1434 阅读 · 0 评论 -
两个栈来实现一个队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。stack1用来压入元素,stack2用来出元素。stack1中的数字顺序刚好和stack2中顺序是反的,故stack2 的出栈顺序才是出题人想要的到的,当stack2 中还有元素时,此时出元素还是要从stack2 出,仅当stack2 为空,才将stack1元素出栈压入stack2 中,再出元素。impor...原创 2019-07-24 18:15:24 · 102 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面(java)
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。1.先找到原数组的奇数个数,再定义一个新的数组,将原数组的数据元素根据要求放置到新数组的相对位置。新数组可分为两个部分,前边是奇数,后边是偶数,两者的分界线就是原数组奇数的个数。时间复杂度:o(n)空间复杂度:o(n)2.还...原创 2019-07-29 15:11:14 · 232 阅读 · 0 评论 -
二叉搜索树得后序遍历序列(java)
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。后序遍历的特点是最后一个遍历根结点,故数组的最后一个必是根结点,数组的前边可划分为两个子数组,比它小的左子树数组,比它大的右子树数组,然后将这两个部分当作参数递归进函数,在查看子数组是否满足条件。import java.util.Arrays;public...原创 2019-08-03 20:51:42 · 118 阅读 · 0 评论 -
剑指offer之替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。看清题目:传入的StringBuffer; 要求输出的是String ;而识别空格应该采用的是char数组。故题目我觉得这道题重点是想考我们对这三种类型的转换掌握情况。解题步骤:1.将StringBuffer str转换成char...原创 2019-07-26 15:36:10 · 77 阅读 · 0 评论 -
复杂链表的复制(java)
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)看了剑指offer的C代码,看的我可迷了,你复制链表直接复制就好了呀,反正我是没看懂原创 2019-08-20 12:51:13 · 186 阅读 · 0 评论 -
二叉树中和为某一值的路径(java)
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)1.还是老话,根结点为空 / target小于0,直接走人。(任何一个路径都是大于等于0叽)2.我们来看它的返回值,ArrayList<ArrayList<Integer>&g...原创 2019-08-19 14:46:06 · 436 阅读 · 0 评论 -
包含min函数的栈(java)
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。首先我们来分析一下这个题,题目要求时间复杂度为O(1),那么我们可以用空间换取时间,重新开辟一个栈,让该栈仅保存输入元素的最小值。注意!!!题目并没有给提供栈,需要在外部首先定义两个栈。...原创 2019-08-19 09:49:30 · 151 阅读 · 0 评论 -
第一次只出现一次的字符(java)
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)根据题目描述:我们即需要标记出现的字符,也要标记字符出现的次数。这个时候你要想到map集合,map集合是key-value形式的。1.先判断给出的字符串是否为空,长度是否为0。满足两者其中一个,直接返回-1就可以了。2.创建key-v...原创 2019-08-18 21:14:31 · 231 阅读 · 0 评论 -
旋转数组的最小数字(java)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。旋转数组是一个概念,题目让你求的是旋转数组的最小元素!!!最小元素原创 2019-07-26 20:45:13 · 154 阅读 · 0 评论 -
孩子们的游戏(java)
每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,...原创 2019-07-26 16:57:04 · 469 阅读 · 0 评论 -
返回二叉树的深度(java)
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。1.空树直接返回0。2.先想一棵简单的树(即只有一个根结点和它的左右孩子),你说根结点的高度是不是它左右孩子高度中比较大的再加上它自己。emmmm 我举个例子叭。就像要你找 “lxh” 这个人有几代的晚辈,你就要先找她孩子有几代的晚辈;你找她孩子的晚辈,是不是要找她孩子的...原创 2019-07-26 16:22:22 · 550 阅读 · 0 评论