自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 66、机器人的运动范围

题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?代码public class Solution { public int movingCount(int threshold, int rows,

2020-08-11 20:22:26 110

原创 65、矩阵中的路径

题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。注意点:题目中并没有给出二维矩阵,所以要对矩阵进行转化–index处public class So

2020-08-11 19:45:23 115

原创 64、滑动窗口的最大值

题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,

2020-08-11 10:09:18 114

原创 63、数据流中的中位数

题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。思路代码//大顶堆存小值,从大到小排;小顶堆存大值,从小到大排。两个堆顶的元素就是中间的元素//比如:321,456->两个堆顶元素是3和4;import java.util.PriorityQueue

2020-08-07 09:52:40 145

原创 62、二叉搜索树的第K个节点

题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路因为是二叉搜索树,所以中序遍历把结点都加到集合中,为从小到大排列的,取第k-1个即可代码/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {

2020-08-06 16:35:21 89

原创 61、序列化二叉树

题目描述请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",然后通过自己

2020-08-06 14:41:08 90

原创 60、把二叉树打印成多行

题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。代码import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {

2020-08-06 13:15:09 78

原创 59、按之字形顺序打印二叉树

题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路利用栈的先进后出的特性实现之字形打印代码import java.util.ArrayList;import java.util.Stack;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;

2020-08-05 19:22:12 116

原创 58、对称的二叉树

题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路左子树的左节点和右子树的右节点相同;左子树的右节点和右子树的左节点相同即可代码/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val

2020-08-05 16:41:06 63

原创 57、二叉树的下一个结点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路中序排序:左中右第一种情况:就是一个节点有右子树。比如要求节点B的下一个节点,其实是找到它的右子树的最左孩子,就是G节点。第二种情况,就是一个节点没有右子树,此时又可以分为两种情况。**对于G这个节点来说,**没有右子节点了,它的父亲节点是E,G是E的左子节点,即E的左子节点是G,那么G的下一个节点就是E。对于E这个节点来说,也没有右子节点,它的

2020-08-02 09:43:56 88

原创 56、删除链表中重复的结点

题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5代码/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public cla

2020-07-31 10:07:30 92

原创 55、链表中环的入口结点

题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路1、判断有无环:快慢指针,快指针一次走两步,慢指针一次走一步,两个指针若指向相同–有环,否则,无环【类比两个人跑步,有环的快的一定能和慢的相遇】2、找入口结点:入口节点到相遇点的距离=头节点到入口结点的距离代码/* public class ListNode { int val; ListNode next = null; ListNode(int val) { t

2020-07-31 09:32:57 118

原创 54、字符流第一个不重复的字符

题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。思路时间复杂度O(1),空间复杂度O(1):无须存储所有字符字符出现次数的判断(不重复字符):这个做法大致相同,利用 Hash 思想采用128大小的计数数组进行计数也好,或者是使用 Map 键值对映射也好,都差不多,使用数组会更简单。字符出现顺序的判断(第一个字符):这里就是

2020-07-30 09:56:13 178

原创 53、表示数值的字符串

题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。//不难,但条件比较多public class Solution { public boolean isNumeric(char[] str) { boolean sign = false, decimal = false,ha

2020-07-30 09:24:25 97

原创 52、正则表达式匹配

题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配思路当模式中的第二个字符不是“*”时:1、如果字符串第一个字符和模式中的第一个字符相匹配,那么字符串和模式都后移一个字符,然后匹配剩余的。2、如果 字符串第一个字符和模式中的第一个字符相不匹配,直接返回fa

2020-07-30 09:23:11 83

原创 51、构建乘积数组

题目描述给定一个数组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];)思路【B[i]的值可以看作下图矩阵中每一行的乘积】下三角用连乘可以很容求得,上三角,从下向上也是连乘。因此我们的思路就很清晰了,先算下三角中的连乘,即我们先算出B[i]

2020-07-29 09:06:21 84

原创 50、数组中重复的数字

题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路HashMap代码import java.util.HashMap;public class Solution { // Parameters: // numbers: an array of

2020-07-28 09:28:01 70

原创 49、把字符串转换成整数

题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0//输入输入一个字符串,包括数字字母符号,可以为空//输出如果是合法的数值表达则返回该数字,否则返回0输入示例:+2147483647 1a33输出示例2147483647 0代码public class Solution { public int StrToInt(String str) { char[] arr = st

2020-07-27 10:12:32 130

原创 48、不用加减乘除做加法

题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路代码public class Solution { public int Add(int num1,int num2) { while(num2 != 0){ int temp = num1 ^ num2; num2 = (num1 & num2) << 1; num1 = temp;

2020-07-27 09:33:28 90

原创 47、求1+2+...+n

题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路递归代码public class Solution { public int Sum_Solution(int n) { if(n == 0) return 0; int sum = n + Sum_Solution(n - 1); return sum; }}...

2020-07-26 10:04:24 69

原创 46、孩子们的游戏(圆圈中最后剩下的数)

题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得

2020-07-25 10:55:50 79 1

原创 45、扑克牌顺子

题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现

2020-07-25 10:30:36 76

原创 44、翻转单词顺序列

题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路先翻转整个字符串,再翻转单个单词,以空格分开,这样就实现了对单词顺序的翻转因为最后一个单词之后没有空格了,所以无法以之前的两个空

2020-07-24 09:46:12 89

原创 43、左旋转字符串

题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路前面翻转(0,n-1);后面翻转(n,lenth-1);整个翻转(0,len-1)可以写几个数试一试代码public class Solution { public String LeftR

2020-07-24 09:13:18 53

原创 42、和为S的两个数

题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述对应每个测试案例,输出两个数,小的先输出。思路滑动窗口;同样和为S的两个数,两边的数的乘积一定是小于中间的数的乘积(比如,同样和为10的两个数,28 < 55)代码import java.util.ArrayList;public class Solution { public ArrayList<Integer> Fin

2020-07-23 09:30:27 88

原创 41、和为S的连续正数序列

题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序思路:滑动窗口import java.util.Ar

2020-07-23 09:17:00 61

原创 40、数组中只出现一次的数字

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。方法一:HashMap//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果import java.util.Map;import java.util.HashMap;public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int nu

2020-07-20 10:44:00 82

原创 39、平衡二叉树

题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树首先要知道什么是平衡二叉树:它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。代码public class Solution { public boolean IsBalanced_Solution(TreeNode root) { return depth(roo

2020-07-20 09:40:58 67

原创 深度优先搜索--DFS

参考链接https://blog.csdn.net/Gene1994/article/details/85097507DFS上图可以看出DFS是如何工作的,使用DFS解决问题时最先想到的应该是递归和栈(Stack)DFS是从起始顶点开始,递归访问其所有邻近节点,比如A节点是其第一个邻近节点,而B节点又是A的一个邻近节点,则DFS访问A节点后再访问B节点,如果B节点有未访问的邻近节点的话将继续访问其邻近节点,否则继续访问A的未访问邻近节点,当所有从A节点出去的路径都访问完之后,继续递归访问除A以外未

2020-07-19 10:35:22 88

原创 广度优先遍历(BFS)

参考链接https://blog.csdn.net/Gene1994/article/details/85097507BFS根据上图就可以很清晰的理解出BFS的概念,即一层一层的遍历。在使用BFS解决问题的时候最先想到的方式应该是队列(Queue,FIFO)其主要思想是从起始点开始,将其邻近的所有顶点都加到一个队列(FIFO)中去,然后标记下这些顶点离起始顶点的距离为1.最后将起始顶点标记为已访问,今后就不会再访问。然后再从队列中取出最先进队的顶点A,也取出其周边邻近节点,加入队列末尾,最后离开这

2020-07-19 10:21:31 250

原创 38、二叉树的深度

题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路深度优先搜索,取左右子树的高度较大的+1(根节点)代码/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;

2020-07-19 10:04:33 63

原创 37、数字在排序数组中出现的次数

题目描述统计一个数字在排序数组中出现的次数。方法一,直接遍历 public class Solution { public int GetNumberOfK(int [] array , int k) { if(array == null || array.length == 0) return 0; int count = 0; for(int i = 0;i < array.length;i++){ if(

2020-07-18 20:54:59 65

原创 排序算法--归并排序

思路–分治归并排序是利用归并的思想实现的排序算法,该算法采用经典的分治策略将问题分解成小的问题然后递归求解,而“治”的阶段则将分的阶段得到的答案“修补在一起”,即分而治之。时间复杂度: n·logn空间复杂度: 1稳定性: 稳定代码public static void mergeSort(int[] arr,int left,int right,int[] temp){ if(left < right){ int mid = left + (rigth - left) / 2;

2020-07-18 11:08:13 94

原创 排序算法--插入排序

插入排序思想:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。时间复

2020-07-18 10:29:07 102

原创 36、两个链表的第一个公共节点

题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思路我们使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。这样,当它们相遇时,所指向的结点就是第一个公共结点。代码/*pub

2020-07-17 20:47:33 78

原创 35、数组中的逆序对

题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)思路利用归并排序中的–前面的值大于后面的值交换即为逆序对,从而找出逆序对的对代码public class Solution { int num; public int InversePairs(int [] array) { if(array == null || array.le

2020-07-15 11:20:18 106

原创 34、第一次只出现一次的字符

题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)比较简单,利用HashMap记录字符出现的次数,最后从头到尾遍历找到第一个出现次数为1的字符位置即可。代码import java.util.Map;import java.util.HashMap;public class Solution { public int FirstNotRepeatingCh

2020-07-15 10:16:36 103

原创 33、丑数

题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路注:习惯上把1当作是第一个丑数代码public class Solution {public int GetUglyNumber_Solution(int index) {if(index <= 0) return 0;int p2 = 0,p3 = 0,p5 = 0;//初始化三个指向三个可

2020-07-12 12:26:23 91

原创 32、把数组排成最小的数

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路比较两个字符串s1, s2大小的时候,先将它们拼接起来,比较s1+s2,和s2+s1那个大,如果s1+s2大,需要把s2放在前面;最后遍历拼接调整好的数组代码import java.util.ArrayList;public class Solution { public String PrintMi

2020-07-11 10:29:50 104

原创 30、连续子数组的最大和

题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)思路:动态规划比较简单,注意一下初始化不要下意识写成0,而

2020-07-09 15:57:50 93

空空如也

空空如也

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

TA关注的人

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