牛客
我是nefu小白
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指offer13. 机器人的运动范围
剑指offer13. 机器人的运动范围 思路: 与剑指offer第十二题相似,用的是回溯法,首先判断该位置是否满足矩阵要求,是否满足题目要求(行坐标和列坐标的数位之和大于k的格子)以及该位置是否未被访问(设置一个boolean的矩阵来记录该位置是否被访问且被计数了),如果上述条件均满足就count加1并判断它的上下左右四个位置是否也满足条件。 代码: class Solution { public int movingCount(int m, int n, int k) { //前提原创 2021-07-24 15:21:07 · 121 阅读 · 0 评论 -
剑指offer 12. 矩阵中的路径
剑指offer 12. 矩阵中的路径 思路: 这个题是一个用回溯法解决的经典题。这个题就是遍历该数组,找到第一个符合ch与word第一个字符i匹配后,就在ch处的上下左右再寻找与i下一个位置相匹配的字符。找到了继续上述操作,没找到就说明这个路径是不通的,需要回溯到上一个ch,然后继续上述操作比较。这枚举出了所有路径,只要有路径就返回true。 代码: class Solution { public boolean exist(char[][] board, String word) {原创 2021-07-01 10:07:05 · 117 阅读 · 0 评论 -
剑指Offer11.旋转数组的最小数字
剑指Offer11.旋转数组的最小数字 1.暴力法: 我们可以直接遍历这个数组,显然这个方法的时间复杂度是O(n)。我们看到旋转数组的特点就是,可以划分为两个排序好的数组,最小的元素正是这两个数组的分界线,因此我们可以不用完全遍历完这个数组。 class Solution { public int minArray(int[] numbers) { int min = numbers[0]; for (int i = 1; i < numbers.length;原创 2021-06-29 18:58:51 · 97 阅读 · 0 评论 -
剑指offer07.重建二叉树
重建二叉树 我们先弄懂一下为什么知道了先序序列和中序序列就能够完成二叉树的重建。 二叉树前序遍历的顺序为:先遍历根节点;随后递归地遍历左子树;最后递归地遍历右子树。 二叉树中序遍历的顺序为:先递归地遍历左子树;随后遍历根节点;最后递归地遍历右子树。 所以说先序序列的第一个就是我们的根节点 我们依据下面的例子画图来理解二叉树重建的过程: 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 从上面我们知道了二叉树的重建过程,我们发现每一个二叉原创 2021-06-28 21:57:35 · 118 阅读 · 0 评论 -
小白教你合并区间
小白教你合并区间 思路: 这个题需要知道Colletions中的sort排序 JDK1.8开发文档 这里我用的是: static <T> void sort(List<T> list, Comparator<? super T> c) 根据指定的比较器引起的顺序对指定的列表进行排序。 我们按区间起点进行升序排列后,从第一个区间开始,比较该区间的终点,与下一个区间的起点的大小,如果该区间的终点大于它下一个区间的起点,则需要合并区间,否则跳过该区间到下一原创 2021-06-28 09:07:00 · 392 阅读 · 0 评论 -
小白教你股票(无限次交易)
股票(无限次交易) 题目描述: 假定你知道某只股票每一天价格的变动。 你最多可以同时持有一只股票。但你可以无限次的交易(买进和卖出均无手续费)。 请设计一个函数,计算你所能获得的最大收益。 示例1: 输入:[5,4,3,2,1] 输出:0 说明:由于每天股票都在跌,因此不进行任何交易最优。最大收益为0。 示例2: 输入:[1,2,3,4,5] 输出:4 说明:第一天买进,最后一天卖出最优。中间的当天买进当天卖出不影响最终结果。最大收益为4。 题目链接: 股票(无限次交易) 思路: 这个题很简单,只需要数组临原创 2021-06-22 00:14:22 · 435 阅读 · 0 评论 -
小白教你数组中出现次数超过一半的数字
数组中出现次数超过一半的数字 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000 示例1: 输入:[1,2,3,2,2,2,5,4,2] 输出:2 示例2: 输入:[3,3,3,3,2,2,2] 输出:3 示例3: 输入:[1] 输出:1 题目链接: 数组中出现次原创 2021-06-22 00:07:25 · 164 阅读 · 1 评论 -
小白教你连续子数组的最大和
连续子数组的最大和 题目描述: 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n). 示例1: 输入:[1,-2,3,10,-4,7,2,-5] 输出:18 说明:输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。 题目链接: 连续子数组的最大和 思路: 这个是一个典型的动态规划问题,设置一个dp数组,数组中存放的均是到当前位置为止的连续子数组的原创 2021-06-21 00:42:01 · 227 阅读 · 0 评论 -
小白教你把数字翻译成字符串
把数字翻译成字符串 题目描述: 有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。 现在给一串数字,返回有多少种可能的译码结果 示例1: 输入:“12” 返回:2 说明:2种可能的译码结果(”ab” 或”l”) 示例2: 输入:“31717126241541717” 返回:192 说明:192种可能的译码结果 思路: 小白看到这个问题的时候并不知道如何下手,后来想到了dp,也就是动态规划。我们可不可以一个个增加字符,然后通过前面的组合数,推出以当前字符结原创 2021-06-21 00:14:21 · 837 阅读 · 0 评论 -
小白教你链表的奇偶重排
链表的奇偶重排 题目描述: 给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。 注意是节点的编号而非节点的数值。 示例1: 输入:{1,2,3,4,5,6} 输出:{1,3,5,2,4,6} 说明: 1->2->3->4->5->6->NULL 重排后为 1->3->5->2->4->6->NULL 示例2: 输入:{1,4,6,3,7} 输出:{1,6,7,4,3} 说明: 1->4->原创 2021-06-20 23:43:55 · 844 阅读 · 2 评论 -
小白教你最长无重复子数组
最长无重复子数组 题目描述: 给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。 子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组 示例: 输入:[2,3,4,5] 返回值:4 说明:[2,3,4,5]是最长子数组 思路: 小白起初看这道题首先想到的是这个题需要使用set集合。 然后小白先想到的是暴力求解,也就是把该数组的每一个位置的最长无重复子数组计算出来,然后返回最大值。我们直接来看一下代码。 imp原创 2021-06-20 15:56:59 · 3069 阅读 · 2 评论 -
小白教你用两个栈实现队列
用两个栈实现队列 题目描述: 用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。 示例1: 输入: [“PSH1”,“PSH2”,“POP”,“POP”] 返回: 1,2 解析: “PSH1”:代表将1插入队列尾部 “PSH2”:代表将2插入队列尾部 "POP“:代表删除一个元素,先进先出=>返回1 "POP“:代表删除一个元素,先进先出=>返回2 示例2: 输入:[“P原创 2021-06-20 12:54:19 · 492 阅读 · 0 评论 -
小白教你斐波那契数列
斐波那契数列 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n≤39 示例: 输入:4 返回值:3 思路: 首先我们必须知道斐波那契数列。 斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*) 这道题与青蛙跳解题的题解题思路一样。青蛙跳阶梯 这道题直接看代码,更容易理解。 代码: public class Solution { pu原创 2021-06-18 22:29:36 · 260 阅读 · 0 评论 -
小白教你进制转换
进制转换 题目描述: 给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数 示例: 输入:7,2 输出:“111” 备注: M是32位整数,2<=N<=16. 思路: 我们先想一想我们10进制数是如何转换成其他进制的? 比如10进制转2进制: 我们手写一下十进制数7转换为二进制: 我们再来看一下十进制数7转换为二进制 现在我们知道我们的十进制转其他进制是由该十进制数除以转的进制数取余数,然后再用其商除以转的进制数取余数,知道商为0,然后从下到上依次读取的结果。 我们再来考虑原创 2021-06-18 19:07:50 · 1415 阅读 · 0 评论 -
动态规划dp解决求路径
求路径 题目描述: 一个机器人在m×n大小的地图的左上角(起点)。 机器人每次向下或向右移动。机器人要到达地图的右下角(终点)。 可以有多少种不同的路径从起点走到终点? 备注:m和n小于等于100,并保证计算结果在int范围内 示例: 输入:4,5 输出:35 思路: 一看这道题与我之前写的易理解的矩阵的最小路径和求法 有这异曲同工之处。用的都是动态规划(Dynamic Programming)思想。 我们同样设置一个n * m的矩阵array,这个矩阵的每个单元格存储的就是到该位置的路径数。 现在我们到原创 2021-06-18 12:11:17 · 235 阅读 · 0 评论 -
一看就会的判断链表中是否有环求法
判断链表中是否有环 题目描述: 判断给定的链表中是否有环。如果有环则返回true,否则返回false。 你能给出空间复杂度的解法么? 输入分为2部分,第一部分为链表,第二部分代表是否有环,然后回组成head头结点传入到函数里面。-1代表无环,其他的数字代表有环,这些参数解释仅仅是为了方便读者自测调试 示例: 输入:{3,2,0,-4},1 返回值:true 说明:第一部分{3,2,0,-4}代表一个链表,第二部分的1表示,-4到位置1,即-4->2存在一个链接,组成传入的head为一个带环的链表 ,返原创 2021-06-18 11:40:35 · 165 阅读 · 0 评论 -
跟着小白做子数组的最大累加和问题
子数组的最大累加和问题 题目描述: 给定一个数组arr,返回子数组的最大累加和 例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12. 题目保证没有全为负数的数据 [要求] 时间复杂度为O(n)O(n),空间复杂度为O(1)O(1) 示例: 输入:[1, -2, 3, 5, -2, 6, -1] 输出:12 题目链接: 子数组的最大累加和问题 思路: 我们同样设置一个arr.length长的数组ans,这个数组的an原创 2021-06-18 09:18:07 · 120 阅读 · 0 评论 -
易理解的矩阵的最小路径和求法
矩阵的最小路径和求法 题目描述: 给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。 示例: 输入:[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]] 输出:12 题目链接: 矩阵的最小路径和 思路: 我们同样设置一个n * m的矩阵res,这个矩阵的每个单元格存储的就是按照题目规则从左上角走到该位置的最小值。 我们依据上述思路自己在草稿纸上写一下我们的解题过程(依据示原创 2021-06-17 19:59:45 · 911 阅读 · 0 评论 -
位运算解决数组中只出现一次的数字
数组中只出现一次的数字 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 题目链接: 数组中只出现一次的数字 此题前置位运算知识: 菜鸟教程 思路: 由位运算的异或运算我们知道了两个相同的数异或为0。 1.我们把该数组中的数全部异或一遍得到的就是两个只出现一次的两数的异或结果。 2.得到的异或的结果二进制为1的位置就是这两个数不同的位,我们利用&运算找到其中的位。 3.利用我们找到的位,再次遍历这个数组,使其分为了两组,(相同的数肯定在一个组原创 2021-06-13 19:58:39 · 189 阅读 · 0 评论 -
算法之反转链表
反转链表 题目描述: 输入一个链表,反转链表后,输出新链表的表头。 示例: 题目链接: 算法之反转链表 思路: 遍历链表让每个结点的next指向上一个结点,这样我们需要设置一个res,初始值为null,从而定义一个新链表,还需要设置一个cur,用来遍历原始链表,注意遍历时需要设置一个temp用来存储cur.next结点,这是为了防止结点信息的遗漏。 代码: public class Solution { public ListNode ReverseList(ListNode head) {原创 2021-06-09 18:13:33 · 139 阅读 · 0 评论 -
用栈实现括号序列
括号序列 题目描述: 给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。 ...原创 2021-06-07 17:12:50 · 238 阅读 · 0 评论
分享