![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
牛客网
牛客网刷题经验
可乐我只喝百事
欲买桂花同载酒,终不似少年游
展开
-
JS 链表内指定区间反转
代码/* * function ListNode(x){ * this.val = x; * this.next = null; * } *//** * * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类 */function reverseBetween(head, m, n) { if (m === n) { return head;原创 2023-05-06 14:15:05 · 155 阅读 · 1 评论 -
算法篇:俩个链表的第一个公共节点
题目描述输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)代码/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindFirst原创 2021-05-12 10:31:11 · 64 阅读 · 0 评论 -
算法篇:最长公共子串(牛客)
题目描述给定两个字符串str1和str2,输出两个字符串的最长公共子串题目保证str1和str2的最长公共子串存在且唯一。解题思路定义两层循环,分别将两个字符串逐个比较,如果有相等的,就让info数组值+1,然后得出最长的子串长度,和重复字串出现的位置,最后进行字符串切割代码import java.util.*;public class Solution { /** * longest common substring * @param str1 stri原创 2021-05-12 10:03:17 · 1664 阅读 · 0 评论 -
算法篇:二叉树的之字形层序遍历(第一层从左向右,下一层从右向左,一直这样交替)
题目描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如:解题思路:先将二叉树按层次遍历从左到右存储到列表,定义一个flag,如果flag为双数也就是能整除2,那么就将列表反转,然后将列表存到总的列表中代码:import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = nu原创 2021-05-10 21:20:20 · 440 阅读 · 1 评论 -
算法篇——Java 大数加法(牛客网刷题)
题目描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成解题思路:总的思路:将字符串变成字符数组,然后两数组元素从后至前进行相加运算,结果存入栈中,将栈变成数组,然后将数组变成字符串,得出结果思路细化:考虑到是从后往前进行运算的,所以使用栈进行结果的存储(先进后出)将字符串变成字符数组看代码代码import java.util.*;public class Solution {原创 2021-05-07 13:10:20 · 216 阅读 · 0 评论 -
算法篇:删除链表的倒数第n个节点
题目描述:给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针例如,给出的链表为: 1→2→3→4→5, n= 2.删除了链表的倒数第 n 个节点之后,链表变为1→2→3→5.备注:题目保证 n 一定是有效的请给出请给出时间复杂度为O(n) 的算法解题思路:首先判断head是否指向空节点,如果指向空,那就什么都不用干了,直接返回null如果不为空,就找循环的次数,即找到从哪里开始断裂。找到链表的节点个数(记得用一个指针myHead保存原来head指向的节点位置,不然会找不到),原创 2021-04-29 21:57:26 · 101 阅读 · 0 评论 -
算法篇:括号序列
题目描述给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。解题思路:这种自己跟自己匹配的题目,首先想到的就是栈,所以这道题使用入栈和弹栈的思想来解当字符串出现向右的括号时,在栈中加入向左的括号(如,在字符串中,出现’(’,在栈中就加入’)’)当字符串没有出现向右的括号时,栈中的元素就弹出,跟字符串的括号匹配,如果相等,就不进行操作原创 2021-04-26 21:50:26 · 263 阅读 · 0 评论 -
算法篇:链表中环的入口(不利用额外空间)
题目描述对于一个给定的链表,返回环的入口节点,如果没有环,返回null拓展:你能给出不利用额外空间的解法么?解题思路:定义一个快指针,一个慢指针,还有一个相遇指针先判断有无环,慢指针走一个节点,快指针走两个节点,如果快指针没有指向空,并且两指针相遇,则证明有环,相遇指针指向相遇的节点,然后退出循环如果相遇指针指向为空,则证明没有相遇,返回null如果相遇了,将慢指针指向头节点,然后慢指针和快指针都指向自己的下一个,知道两指针相遇,相遇节点就是环的入口/** * Definition原创 2021-04-26 21:27:45 · 107 阅读 · 0 评论 -
算法篇:合并两个有序数组
题目如下:给出两个有序的整数数组 A和 B,请将数组 B合并到数组 A中,变成一个有序的数组注意:可以假设 A数组有足够的空间存放B 数组的元素, A和B中初始的元素数目分别为 m和 n解题思路:A、B数组均是有序数组,要把B数组的元素有序的存到A数组中,所以不能从A数组前面开始存要从后开始(如果从头开始存的话,会丢失A数组的元素)将A数组与B数组中的元素比较,谁大谁就放到A数组的后面,直到其中一个数组元素轮完然后将剩余元素存到A数组中public class Solution {原创 2021-04-26 20:55:49 · 495 阅读 · 0 评论 -
Day11 判断给定链表是否有环
解题思路:定义一个快指针和一个慢指针,循环链表,慢指针永远指向下一个,快指针则指向下一个的下一个,如果两指针相遇,则证明有环。如果可以跳出循环(即快指针的下一个或快指针本身指向null)就证明无环易错点:循环的条件是快指针的下一个或快指针本身不指向null而不是(pre.next !=null && next.next != null)快指针的下一个不为null并且慢指针的下一个也不为null因为快指针在循环里面是要跳到当前位置的下一个的下一个,所以在下一次循环中,快指针很可能指向原创 2021-04-23 10:36:08 · 56 阅读 · 0 评论 -
Day8 两数之和
解题思路:暴力解法定义一个while循环,在循环中,将目标值与数组元素分别相减,用变量temp存储使temp与数组中非减数对比(如:temp =target - number[1],那么temp就不能与number[1]进行比较了,而与其他元素比较)若相等,跳出循环,将匹配的减数与非减数下标分别存入列表但是运行时间较长解题中的错误:1、这句代码一定不能少(falg!=count),否则会与自己本身进行比较,不符合题意2、要进行判断import java.util.*;publi原创 2021-04-17 11:32:38 · 71 阅读 · 0 评论 -
Day9 使用两个栈实现队列
解题思路:push()方法很简单,就是将元素放入stack1pop()方法:将stack1中的元素放入stack2中,元素顺序就是stack1中的逆序(如stack1中是:1、2、3;在stack2中就是:3、2、1),然后用一个int变量存储,并返回注意:如果不在pop()出stack2中的某些数据后,再将stack2数据装入stack1,就会导致顺序打乱,如:最开始是拿出1、2这两个元素,但是“3”这个元素还留在stack2中,按照栈的出栈顺序,就会导致“3”最后出栈import jav原创 2021-04-19 20:39:59 · 67 阅读 · 0 评论 -
Day9 跳台阶问题
解题思路:这就是一个数学规律题,找到规律就好第n次跳的台阶数等于前两次的和public class Solution { public int jumpFloor(int target) { if(target == 1){ return 1; } if(target == 2){ return 2; } return jumpFloor(target-1)+jum原创 2021-04-19 20:46:16 · 69 阅读 · 0 评论 -
Day 10 链表中的结点每K个翻转一次
解题思路:定义一个新的结点list,永远放在第一个,便于找到链表的头结点定义pre指针指向list,定义cru指针指向head指向的结点(后续会使用head指针来找链表长度,所以head不会是只向头结点),定义temp指针利用head指针找到链表长度,确定循环次数确定两层循环,第一层确定反转次数,第二层确定反转k个结点import java.util.*;/* * public class ListNode { * int val; * ListNode next = n原创 2021-04-21 20:11:32 · 85 阅读 · 0 评论 -
Day 10 动态规划问题返回子数组的最大累加和
import java.util.*;public class Solution { /** * max sum of the subarray * @param arr int整型一维数组 the array * @return int整型 */ public int maxsumofSubarray (int[] arr) { // write code here int max = 0;//存储最大的数 .原创 2021-04-21 20:55:29 · 59 阅读 · 0 评论 -
Day11最长无重复子串
解题思路:定义一个链表,循环整个数组循环一次,就将链表与数组元素比较,如果链表中存在这个元素,就将链表中的所有节点移除,然后加入被比较的数组元素;如果不存在也加入被比较的数组元素count用来保存当前最大的无重复子串的长度易错点:这个是求最长无重复子串,而不是求数组中无重复数字的个数最开始笔者就是没有读清楚题目,所以导致思路错误import java.util.*;public class Solution { /** * * @param arr i原创 2021-04-23 09:55:57 · 57 阅读 · 0 评论