
算法
文章平均质量分 75
随机的未知
随机的未知
展开
-
LeetCode11. 盛最多水的容器题解
LeetCode11. 盛最多水的容器题解原创 2024-06-24 12:54:03 · 409 阅读 · 0 评论 -
对撞指针技巧
这样的话,操作数量就会变少了。那我们就需要定义一个指针,从后往前移动。原创 2024-06-24 12:44:51 · 318 阅读 · 0 评论 -
LeetCode80. 删除有序数组中的重复项 II题解
slow,fast-1]代表需要重复的区域;[0,slow-1]代表不需要删除区域;然后返回slow的值,就是所求数组长度。[fast,n-1]代表未处理的区域。直到fast超出数组长度。原创 2024-06-19 14:49:23 · 338 阅读 · 0 评论 -
LeetCode26. 删除有序数组中的重复项题解
LeetCode26. 删除有序数组中的重复项题解原创 2024-06-19 14:37:19 · 417 阅读 · 0 评论 -
LeetCode27. 移除元素题解
LeetCode27. 移除元素题解原创 2024-06-17 09:08:32 · 286 阅读 · 0 评论 -
快慢指针技巧
快慢指针技巧原创 2024-06-17 09:01:33 · 622 阅读 · 0 评论 -
Leetcode 2题 两数相加
题目链接https://leetcode-cn.com/problems/add-two-numbers/题目描述给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头。示例如下:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.分析1.参数是两个链表,两个链表可能包原创 2021-06-22 20:08:15 · 194 阅读 · 1 评论 -
Leetcode 42题 接雨水(Trapping Rain Water) Java语言求解
题目链接https://leetcode-cn.com/problems/trapping-rain-water/题目内容给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6思路我们可以设置两个数组,left_height_array和right_height_array;其中left_height_array表示当前柱子前面的所有柱子的最高值(不包括当前柱子);ri原创 2020-06-11 09:37:04 · 285 阅读 · 0 评论 -
详解堆排序算法
什么是堆堆首先是一个完全二叉树,堆分为大顶堆和小顶堆;大顶堆 :每个节点的值大于或等于其左右孩子节点的值,称为大顶堆。小顶堆同理就是每个节点的值小于或等于其左右孩子节点的值。注意:每个节点的左右孩子节点的大小关系并没有限定。大顶堆举例如图:首先其为一个完全二叉树,且其每个节点的值都大于或者等于其左右孩子节点的值。完全二叉树从上到下,从左到右依次编号,就可以将其进行顺序存储,我们从根节点开始,从0开始编号,存入数组如下:堆特点由大顶堆定义知道,如果我们从上到下,从左到右,根节点开始原创 2020-05-19 17:20:03 · 1289 阅读 · 1 评论 -
详解基数排序算法
基本思想基数排序的思想是将整数按位数切割成不同的数字,然后按每个位数分别比较从而得到有序的序列。例子本文以数组中元素均为正整数来演示思想。给定一个数组 arr = [ 6, 56, 89 , 12 ,39 ,21,10,156,657 ];初始状态如下:按照个位装桶十进制的每位数字都是从0-9的,所以我们分配10个桶,每个桶有一定的容量(本文将设定为数组长度大小);第一轮先按照...原创 2020-05-06 17:51:23 · 1025 阅读 · 1 评论 -
详解归并排序算法
基本思想归并排序的基本思想是:先将序列一次次分成子序列,直到子序列长度为1;再将已有序的子序列合并,得到完全有序的序列。可以看出归并排序运用了 ** 分而治之的思想** 。例子输入数组 [ 2, 5, 3 , 10,-3,1 , 6 , 4];初始状态如下:则分治思想如下:首先把数组依次折半,分成小的子数组,直到每一个子数组的长度都为1;然后合并子数组,在合并的过程中进行排序...原创 2020-04-27 14:10:54 · 2456 阅读 · 1 评论 -
Leetcode 92题反转链表 II(Reverse Linked List II) Java语言求解
题目链接https://leetcode-cn.com/problems/reverse-linked-list-ii/题目描述反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2-&...原创 2020-04-20 09:01:58 · 336 阅读 · 1 评论 -
详解快速排序算法
基本思想本文的思路是以从小到大为例讲的。快速排序的基本思想是任取待排序序列的一个元素作为中心元素(可以用第一个,最后一个,也可以是中间任何一个),习惯将其称为pivot,枢轴元素;将所有比枢轴元素小的放在其左边;将所有比它大的放在其右边;形成左右两个子表;然后对左右两个子表再按照前面的算法进行排序,直到每个子表的元素只剩下一个。可见快速排序用到了分而治之的思想。将一个数组分成两个数...原创 2020-04-13 09:24:08 · 526 阅读 · 1 评论 -
希尔排序算法
前言当待插入元素是一个很小(当需求是从小到大排序时,从大到小排序时此处为很大)直接插入排序需要移动较多次数,性能会很差。希尔排序解决了这一问题。基本思想希尔排序的基本思想:把序列按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。如果对直接插入排序不了解的朋友,可以看我的这篇文章:*链接=...原创 2020-04-07 09:11:59 · 483 阅读 · 4 评论 -
详解直接插入排序算法
前言在玩扑克牌的时候,我们抽到一张牌的时候,都是将它插入到当前手中牌的合适位置的。如下图:(上图来自算法导论)插入排序也是这样的思想。基本思想插入排序的思想是:将待排序序列分成两个序列,前面的序列保持有序,依次选取后面的序列的元素,在前面的序列中进行插入。初始时,有序序列的长度为1。例子给定序列[9 , 20 , 13 , 20 , 12 ] 。初始状态如下:...原创 2020-03-30 09:11:37 · 423 阅读 · 1 评论 -
详解选择排序算法
基本思想选择排序的思想是:给定一个数组arr,其长度为n;第一次从 arr[0] 到 arr[n-1] 中选取一个最值(按照需求,可以是最大值,可以是最小值,下同)与arr[0]进行交换;第二次从arr[1] 到 arr[n-1] 中选取一个最值与arr[1]进行交换;以此类推,直到arr[n-2]到arr[n-1]中选出最值交换后即完成排序。(只剩下一个元素,前面的都是比它小(或者大...原创 2020-03-25 08:57:16 · 1027 阅读 · 1 评论 -
详解冒泡排序算法
文章目录基本思想例子第一趟排序第二趟排序第三趟排序第四趟排序代码优化时间复杂度稳定性总结欢迎关注基本思想冒泡排序的基本思想是:通过对待排序的序列从前向后依次比较相邻元素的值,如果发现逆序则交换。逆序的含义:如果想把序列从小到大排序,那么两个数中前面的比后面的大就是逆序。若需求是将序列从小到大排序,那么每一趟比较都会把值较大的逐渐从前面移动到后面。就像水底的泡泡一样:(如下图,图片来源...原创 2020-03-23 07:03:30 · 3488 阅读 · 1 评论 -
Leetcode 98题验证二叉搜索树(Validate Binary Search Tree) Java语言求解
题目链接https://leetcode-cn.com/problems/validate-binary-search-tree/##题目内容给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。给出两个案例,如图:分析二叉搜索树的特...原创 2020-03-20 07:51:33 · 252 阅读 · 0 评论 -
Leetcode 206题 反转链表(Reverse Linked List)Java语言求解
题目描述:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL迭代解法/**Definition for singly-linked list.public class ListNode { int val; ListNode next; ...原创 2020-01-25 16:03:35 · 199 阅读 · 0 评论 -
Leetcode 20题 有效的括号(Valid Parentheses) Java语言求解
题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。做法使用栈来进行辅助求解。1、创建一个空栈;2、使用循环对字符串进行遍历转3,遍历完毕退出循环转7;3、如果当前字符为’(’、’{’、’[‘则进栈,转2;4、如...原创 2020-01-31 09:26:04 · 142 阅读 · 0 评论 -
Leetcode 142题 环形链表 II(Linked List Cycle II) Java语言求解
题目描述:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。分析给出示意图:对符号的一些说明:公式演算:很容易得到:m=x+y(环的长度两种表示形式);快指针走两步,慢指针走一...原创 2020-01-27 18:09:08 · 238 阅读 · 0 评论 -
Leetcode 24题 两两交换链表中的节点(Swap Nodes in Pairs)Java语言求解
题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4,你应该返回 2->1->4->3.注意事项1、不能简单的交换数值,而是需要更改指针,即确实更改了节点;2、如果节点个数是奇数,如下图:那么第5个节点不用交换。只需变成如下图所示链表即...原创 2020-01-25 16:12:02 · 208 阅读 · 0 评论 -
Leetcode 面试题22. 链表中倒数第k个节点 Java语言求解
题目链接https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/题目内容输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值...原创 2020-03-16 20:56:21 · 192 阅读 · 0 评论 -
Leetcode 239题 滑动窗口最大值(Sliding Window Maximum) Java语言求解
题目链接https://leetcode-cn.com/problems/sliding-window-maximum/题目内容给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出...原创 2020-02-11 08:17:25 · 343 阅读 · 0 评论 -
Leetcode 703题数据流中的第K大元素(Kth Largest Element in a Stream)Java语言求解
题目链接https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/题目内容设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.ad...原创 2020-02-05 08:07:54 · 111 阅读 · 0 评论 -
LeetCode 225题用队列实现栈(Implement Stack using Queues) Java语言求解
链接https://leetcode-cn.com/problems/implement-stack-using-queues/思路首先演示push()操作;将元素依次进入队1,进入时用top元素保存当前进入的元素;如下图:然后演示pop()操作;先将除队1中的最后一个元素出队并进入队2,入队2时用top存储入队元素;再将队列1和队列2进行互换即可。如下图:代码impor...原创 2020-02-03 08:04:35 · 167 阅读 · 0 评论 -
LeetCode 232题用栈实现队列(Implement Queue using Stacks) Java语言求解
题目链接https://leetcode-cn.com/problems/implement-queue-using-stacks/题目描述使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。示例:MyQueue queue = new M...原创 2020-02-01 07:40:52 · 151 阅读 · 0 评论 -
Leetcode 141题 环形链表(Linked List Cycle) Java语言求解
题目描述:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。Map集合解法思路:创建一个map集合,key为节点,value为地址值,因为ListNode没有重写toString()方法,所以用toString()方法返回的内容作为value。如果map中存在...原创 2020-01-25 16:19:59 · 163 阅读 · 0 评论