![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
危楼百尺高
这个作者很懒,什么都没留下…
展开
-
链表的重复节点删除
【题目一】 力扣83 删除重复的节点(保留重复的节点)给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3【解法1】使用set去重,思路很简单。时间复杂度O(N),空间复杂度O(N)public static ListNode deleteRepeatedNode1(ListNode head) { if ...原创 2020-08-11 22:31:04 · 691 阅读 · 0 评论 -
链表的环以及环的入口
1判断是否有环使用快慢指针,快指针 fast 每次走两步,慢指针 slow 每次走一步,如果链表存在环,则快指针 fast 与慢指针 slow 一定会在环的某一环节进行相遇 如果链表没有环,则快指针一定会走到链表的尽头,且不可能与慢指针 slow 进行相遇2 找到环的入口len 表示链表头节点到环入口的距离x 表示入口结点到fast和slow相遇结点的距离y 表示换剩下的距离L 表示环的长度显然 L = x + y当快慢指针相遇时,慢指针走过的距离为 d ...原创 2020-08-09 17:01:02 · 1041 阅读 · 0 评论 -
Java引用修改值
以链表节点为例 链表节点代码如下public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } @Override public String toString() { return " "+val+" "; }}1 对于null值的修改...原创 2020-08-05 21:44:16 · 428 阅读 · 0 评论 -
接雨水问题总结
力扣 84 题 如下:【解法一】暴力法解题思路:每根主子的存水量 = 该柱子的左右两侧最大高度的较小者减去此柱子的高度。只要能找到每根柱子的左右两侧的最大值就能求出当前柱子的接水量。代码如下 /** * 暴力破解法: * 每根主子的存水量 = 该柱子的左右两侧最大高度的较小者减去此柱子的高度。 */ public static int solution(int[] height){ int res = 0; // 遍历每个柱子 for (int i = 1; i原创 2020-07-31 01:17:21 · 2323 阅读 · 0 评论 -
最大值减去最小值小于或等于 num 的子数组数量
【题目】 给定数组 arr 和整数 num,共返回有多少个子数组满足如下情况: max(arr[i..j]) - min(arr[i..j]) <= num max(arr[i..j])表示子数组 arr[i..j]中的最大值,min(arr[i..j])表示子数组 arr[i..j]中的最小值。 【要求】 如果数组长度为 N,请实现时间复杂度为 O(N)的解法。【解题思路】本体最关键的地方是在于如果下手去遍历正数组拿到所有的子数组,再求子数组的最大值和最小值,..原创 2020-07-28 00:43:10 · 425 阅读 · 0 评论 -
单调栈的使用
1 单调栈特点单调栈顾名思义,栈中的数据是递增或者是递减的,具体而言单调递增栈:栈中数据出栈的序列为单调递增序列 单调递减栈:栈中数据出栈的序列为单调递减序列2 单调栈的使用【题目1】 给定一个不含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。【举例】 arr = {3,4,1,5,6,2,7} 返回如下二维数组作为结果: { {-1, 2}, { 0, 2}, ...原创 2020-07-19 00:36:39 · 228 阅读 · 0 评论 -
滑动窗口求解最大 最小值问题
题目:有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边 滑一个位置。例如,数组为[4,3,5,4,3,3,6,7],窗口大小为 3 时: [4 3 5] 4 3 3 6 7 窗口中最大值为 5 4 [3 5 4] 3 3 6 7 窗口中最大值为 5 4 3 [5 4 3] 3 6 7 窗口中最大值为 5 4 3 5 [4 3 3] 6 7 窗口中最大值为 4 4 3 5 4 [3 3 6] 7 窗口中最大值...原创 2020-07-17 09:57:35 · 1263 阅读 · 0 评论 -
KMP算法理解及代码实现(通俗易懂版)
1 KMP算法KMP算法使用来解决,一个字符串是否为另一个字符串的子的问题,KMP算法之所以高效是 因为匹配失败时,总是能够让模式串回退到某个位置,使文本不用回退。而其重点难点也就是在于模式串到底要回退多少才合适。2 关于前缀 后缀对于字符串 abcd 前缀包括:[a] [ a b] [a b c],后缀包括:[d] [c d] [ b c d],前后缀不包括字符串本身。3 关于为什么要求模式串前缀后缀最长公共元素长度例如给定文本串S "BBCABCDABABCDABCD...原创 2020-07-12 01:19:03 · 1252 阅读 · 0 评论 -
插入排序的理解以及希尔排序的实现
1 插入排序的实现算法思路:将数组的第一个数认为是有序数组,从数组的第二个元素开始将后面的元素依次插入到有序数组的合适位置。如下图所示: 2 代码实现public static void main(String[] args) { int[] arr = { 1, 5, 3, 7, 8, 6, 2, 4, 11, 12, 13, 14, 15 }; ...原创 2020-07-07 18:00:33 · 201 阅读 · 0 评论 -
数据结构堆以及堆排序的要点
1 堆堆的重要性质:任意节点的值总是大于等于(或者小于等于)子节点的值如果任意节点的值总是≥ 子节点的值 称为 最大堆 大根堆 大顶堆 如果任意节点的值总是≤ 子节点的值 称为 最小堆 小根堆 小顶堆2 二叉堆二叉堆的逻辑结构是一个完全二叉树 也叫完全二叉堆鉴于完全二叉树的一些特性,二叉堆的底层(物理结构)一般用数组实现索引 i 的规律,(n是元素的数量)如果 i = 0,它是根节点 如果 i > 0,它的父节点索引为 floar( (i-1) / ...原创 2020-07-05 15:28:05 · 249 阅读 · 0 评论