牛客网经典147
qq_40396568
这个作者很懒,什么都没留下…
展开
-
二叉树的前、中、后序遍历
递归实现: 前序遍历 根左右 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left...原创 2021-08-12 21:19:13 · 47 阅读 · 0 评论 -
NC33 合并有序链表
思路:头结点,双指针 import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { /** * * @param l1 ListNode类 * @param l2 ListNode类 * @return ListNode类 */ publi...原创 2021-07-28 15:04:12 · 51 阅读 · 0 评论 -
NC156 数组中只出现一次的数(其它数出现k次)
参考评论区解法 方法1 首先进行排序,然后相邻比较,相同则当前比较的数往后走(k-1步),因为有k个相同的数,不同则直接返回当前元素 不理解的时候,debug一遍,看看变量值的变化 public int foundOnceNumber(int[] arr, int k) { Arrays.sort(arr); //i<arr.length-1,再往后走,arr[i+1]越界 for(int i = 0; i<arr.length-1; i++){ //相同走..原创 2021-06-30 16:39:56 · 132 阅读 · 0 评论 -
斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n≤39 参考大话数据结构P100,是一个关于兔子生兔子的应用,具体看书 问题抽象为:第三个数为前两数之和,从第三个数开始,后一项为前两项之和 f(0)=0; f(1)=1; f(2)=f(0)+f(1) ............... f(n)=f(n-1)+f(n-2) 递归公式:f(n)=f(n-1)+f(n-2) 终止条件 n<2【n=0/n=1】 ..原创 2021-06-30 11:38:15 · 67 阅读 · 0 评论 -
删除有序链表中重复出现的元素
和上一道删除重复的元素不同,上一道只是去重,这一道是去掉“重复出现的元素和它自己” 思路:头结点(哨兵节点),因为我们可能删掉首节点 代码实现: import java.util.*; public class Solution { public ListNode deleteDuplicates (ListNode head) { //定义头结点 ListNode dummy = new ListNode(-1); //带头节点链表..原创 2021-06-29 18:40:24 · 105 阅读 · 0 评论 -
删除有序链表中重复的元素
链表有序 假设链表为1 2 2 3 3 3 4 5 思路 首先判断链表为空或者只有一个节点直接返回 原链表不动便于返回链表头,设置两个指针front、rear, front指向头节点, rear指向下一个节点 front、rear值相等,节点摘下,摘下之前rear指向下一个节点,防止断开 再判断rear指向的节点是否还是与front值相等(3 3 3 4 4-> 3 3 4 5) front、rear值不等,两个指针一起往下走 代码实现如下: impo...原创 2021-06-29 16:41:59 · 60 阅读 · 0 评论 -
合并两个有序的数组
A数组是足够大的,相当于AB两数组元素排完序放回A数组中 思路:设置三个指针i、j、s, i、j两个指针分别指向数组A、B的末尾元素,s指针指向数组A最后的位置,然后数组A、B从后往前比较大小,大的填充到数组A的尾部,然后指针前移 public class Solution { public void merge(int A[], int m, int B[], int n) { //定义三个指针 int i = m-1; int j = n-1; ...原创 2021-06-29 16:01:24 · 50 阅读 · 0 评论 -
反转(翻转)字符串(Java实现)
方法一: 将字符串从尾到头依次拼接: public String solve (String str) { // write code her String string=""; for(int i = str.length()-1;i>=0;i--) { string += str.charAt(i); } return string; } 方法二: ...原创 2021-06-08 15:58:20 · 651 阅读 · 0 评论 -
青蛙跳台阶(Java实现)
问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。原创 2021-06-08 12:04:10 · 497 阅读 · 0 评论 -
删除链表中的倒数第k个节点||快慢指针实现
我们随便举两种情况,首先是5个节点删除倒数第二个节点,然后是7个节点删除倒数第5个原创 2021-06-01 16:18:14 · 118 阅读 · 0 评论 -
NC4 判断链表中是否有环
通俗解释:两个人同一起点绕操场跑,速度不一样,但是跑的时候速度不变,快的一定会超过慢的一圈(或者说两个人一定会再次相遇) 问题描述:给定一个链表,判断链表中是否有环。 以下两种情况都属于链表中存在环,“0”字型和“6”字型 ...原创 2021-05-30 16:02:49 · 80 阅读 · 0 评论 -
有序数组删除重复数字
有序数组删除重复数字 1、数组为空或者只有一个元素,直接返回 2、数组长度大于1,从第二个元素开始往前比较,定义指针指向当前第二个数(这是可能要被替代的位置,如【1 1 2】,2往前挪,也可能不被替代如【1 2 2 3 3】,那么指针指向下一个位置)这个指针既表示当前所指向的“替代”位置,也表示当前不重复元素的个数 public class Solution { public int removeDuplicates(int[] A) { int index = 1;..原创 2021-05-24 12:13:48 · 616 阅读 · 0 评论 -
NC78 反转链表
方法一 头插法 所谓头插法,是指在原有链表的基础上,依次将位于链表头部的节点摘下,然后采用从头部插入的方式生成一个新链表,则此链表即为原链表的反转版。 定义一个原创 2021-05-28 22:18:11 · 112 阅读 · 0 评论