![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法刷题
文章平均质量分 53
主要是以剑指offer及leecode为主
字里行间Flower
我觉得无聊时,依然感到有趣
展开
-
动态规划思路及解题
概念引入 动态规划是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题、最短路径问题和复杂系统可靠性问题等中取得了显著的效果。 DP思想 动态规划算法通常用于求解具有某种最优性质的问题。 在这类问题中,可能会有许多可行解。每一个解都对应于一个原创 2021-08-22 13:43:08 · 558 阅读 · 0 评论 -
2021-06-16(链表中倒数第k个节点)
[剑指 Offer 22. 链表中倒数第k个节点](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 个节点是值为 4 的节点。 解题思路 为了能够只遍历一次就能找到倒原创 2021-06-16 22:29:22 · 40 阅读 · 0 评论 -
2021-06-02(删除链表中的重复元素)
83. 删除排序链表中的重复元素 题目描述 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。 返回同样按升序排列的结果链表。 示例 1: 输入:head = [1,1,2] 输出:[1,2] 解题思路 1、因为链表是有序的,所以重复元素一定相邻。 2、遍历链表,如果发现当前元素和下个元素值相同,就删除下个元素值 3、遍历结束后,返回原链表的头部 代码实现 class Solution { public ListNode deleteDup原创 2021-06-02 21:40:41 · 296 阅读 · 0 评论 -
2021-05-31
[92. 反转链表 II](https://leetcode-cn.com/problems/reverse-linked-list-ii/) 题目描述 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例 1: 输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5] 示例 2: 输入:head = [5原创 2021-05-31 22:52:32 · 78 阅读 · 0 评论 -
2021-05-30(旋转数组的最小数字)
剑指 Offer 11. 旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 输入:[3,4,5,1,2] 输出:1 示例 2: 输入:[2,2,2,0,1] 输出:0 解题思路 观察旋转之后的数组可以发现划分为了两个子数组,并且,前面的字数组元素大于或者等于后面的子数组,并且发现最小元素正好是两个原创 2021-05-30 21:42:05 · 52 阅读 · 0 评论 -
2021-05-29(斐波那契数列、青蛙跳台阶)
剑指 Offer 10- I. 斐波那契数列 题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输原创 2021-05-29 21:44:44 · 79 阅读 · 0 评论 -
2021-05-28(删除链表结点、反转链表)
237_删除链表中的节点 题目描述 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 -> 9 示例 1: 输入: head = [4,5,1,9], node = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9. 说明: 1、链表中至少包含两个节点 2、链表原创 2021-05-28 21:34:47 · 89 阅读 · 0 评论 -
2021-05-27(两数之和、验证回文串、长度最小的子数组)
leecode167. 两数之和 II - 输入有序数组 题目描述 给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例 1: 输原创 2021-05-27 22:57:27 · 60 阅读 · 0 评论 -
2021-05-26(替换空格、从尾到头打印链表)
剑指 Offer 05. 替换空格 题目描述 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = “We are happy.” 输出:“We%20are%20happy.” 限制: 0 <= s 的长度 <= 10000 解题思路 双指针方法 1、首先将空格数量计算出来,将其转化成字符数组 2、根据需要替换的空格数量创建新的字符数组 3、利用双指针,头指针指向原有字符数组的末尾,尾指针指向替换后的字符数组的末尾。。接下来向前移动头指针,逐个把它指向的字符复制原创 2021-05-26 21:48:55 · 94 阅读 · 0 评论