![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
手撕算法
抹茶2077
有效输出,无限进步。
展开
-
53. 最大子数组和
53. 最大子数组和:题目链接 :53. 最大子数组和题目:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。思路1:动态规划首先分析题目要求可得,目标是得到数组元素的连续最大和,这个和可以是一个元素,但必须保证是连续n个元素之和。解决有后效性问题:有后效性指的是前面计算得到的子问题得到的值会被后序子问题的计算修改,恰如本题中,如果我们设置子问题状态位“经过某元素的最大子数组和”,那么意味着所有原创 2022-01-29 21:18:45 · 2235 阅读 · 0 评论 -
【手撕算法】划分链表(不使用额外空间)
题目:给出一个长度为 n 的单链表和一个值 x ,单链表的每一个值为 listi ,请返回一个链表的头结点,要求新链表中小于 x 的节点全部在大于等于 x 的节点左侧,并且两个部分之内的节点之间与原来的链表要保持相对顺序不变。例如:给出 {1,4,3,2,5,2},3返回 {1,2,2,4,3,5}思路:不使用额外空间划分,这要求我们声明两个链表头,分别存储<目标值的元素和>目标值的元素。链表分割后进行合并,小于段的尾连接大于段的头import java.util.*;.原创 2021-11-18 22:00:01 · 2742 阅读 · 0 评论 -
剑指 Offer II 039. 直方图最大矩形面积
剑指 Offer II 039. 直方图最大矩形面积:题目链接 :剑指 Offer II 039. 直方图最大矩形面积题目:给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。思路:1、单调栈+哨兵:(1)矩形面积的计算=底*高,这是毋庸置疑的,那么需要的到三个参数:左边界、右边界、高、(2)我们的策略是将所以单位宽度为1的矩形的高都压入一个单调栈,即每个高只进入栈中一次。(3)原创 2021-10-14 21:29:35 · 2505 阅读 · 0 评论 -
【手撕算法】设计链表
1. 设计链表分步解析自定义链表节点类与初始化获取指定节点值链表头插入链表尾插入插入指定位置删除指定节点自定义节点类与初始化Java中自定义节点类的定义:public class ListNode { int val; ListNode next; ListNode(){} ListNode(int val) { this.val=val; }}链表初始化 public MyLinkedLi原创 2021-09-02 17:38:16 · 1596 阅读 · 0 评论 -
【手撕算法】删除链表的倒数第N个节点
双指针法既然是删除节点,那我们肯定要考虑删除头节点的情况,所以,要想不对头节点进行特殊操作,我们需要声明哑节点来一般化头节点。我们知道,经典的倒数第几个节点的问题,可以用双指针解决,原理就是两个节点初始化都指向头节点,第一个节点先走n个单位,然后两个节点一起向前遍历,这样我们保证了两个节点的相对距离永远是n,那么到第一个节点为null时,第二个节点就在倒数第n个节点位置。再看第二个问题,要删除此时的倒数第n个节点,而对链表删除操作来说,要获得要删除节点的前一个节点,这样方便我们对链表进行重新连接..原创 2021-09-02 17:30:42 · 1616 阅读 · 0 评论 -
【手撕算法】反转链表
迭代做法经典双指针,用一个temp指针当临时变量,占住cur.next的坑(占住cur正数的后一项)。让pre成为cur的后一项,把cur的值给pre,把temp的值给cur,这样实现往后移了。最后pre指向最后一个结点而cur指向他下一处,即null。 ListNode pre=null; ListNode cur=head; ListNode temp=null; while(cur!=null) { //因为一会要把cur的下一个节点指向.原创 2021-09-02 17:27:38 · 1657 阅读 · 0 评论