算法
文章平均质量分 89
x-dragon8899
“年年有风 风吹年年 慢慢即漫漫”
展开
-
算法题解(剑指Offer篇)
文章目录栈与队列(简单)*剑指 Offer 09. 用两个栈实现队列 - 12.27剑指 Offer 30. 包含min函数的栈 - 12.27链表(简单)*剑指 Offer 06. 从尾到头打印链表 - 12.28剑指 Offer 24. 反转链表 - 12.28剑指 Offer 35. 复杂链表的复制 - 12.28栈与队列(简单)*剑指 Offer 09. 用两个栈实现队列 - 12.27剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 app原创 2022-01-27 10:36:28 · 1049 阅读 · 0 评论 -
算法题解(位运算)
文章目录剑指 Offer 15. 二进制中1的个数剑指 Offer 65. 不用加减乘除做加法剑指 Offer 56 - I. 数组中数字出现的次数剑指 Offer 56 - II. 数组中数字出现的次数 II剑指 Offer 15. 二进制中1的个数剑指 Offer 15. 二进制中1的个数解析:public class Solution { // you need to treat n as an unsigned value public int hammingWeig原创 2022-01-27 10:34:43 · 821 阅读 · 0 评论 -
算法题解(二分查找)
文章目录*剑指 Offer 53 - I. 在排序数组中查找数字 I - 12.30*剑指 Offer 53 - I. 在排序数组中查找数字 I - 12.30剑指 Offer 53 - I. 在排序数组中查找数字 I统计一个数字在排序数组中出现的次数。解法一:使用二分查找,对比中间值,找到后分别统计左右两边与目标值相等的次数。class Solution { public int search(int[] nums, int target) { int len = n原创 2022-01-27 10:23:11 · 243 阅读 · 0 评论 -
算法题解(栈、队列、堆 篇)
文章目录*剑指 Offer 09. 用两个栈实现队列 - 12.27剑指 Offer 30. 包含min函数的栈 - 12.27*剑指 Offer 59 - I. 滑动窗口的最大值*剑指 Offer 59 - II. 队列的最大值*剑指 Offer 09. 用两个栈实现队列 - 12.27剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没原创 2022-01-27 10:09:52 · 643 阅读 · 0 评论 -
算法题解(动态规划篇)
文章目录剑指 Offer 10- II. 青蛙跳台阶问题 - 12.3剑指 Offer 10- II. 青蛙跳台阶问题 - 12.3剑指 Offer 10- II. 青蛙跳台阶问题解析:首先考虑n等于0、1、2时的特殊情况,f(0) = 0 f(1) = 1 f(2) = 2 其次,当n=3时,青蛙的第一跳有两种情况:跳1级台阶或者跳两级台阶,假如跳一级,那么 剩下的两级台阶就是f(2);假如跳两级,那么剩下的一级台阶就是f(1),因此f(3)=f(2)+f(1) 当n = 4时,f(4)原创 2021-12-23 17:57:24 · 575 阅读 · 0 评论 -
算法题解(二叉树篇)
文章目录递归算法三要素二叉树理论基础144. 二叉树的前序遍历 - 12.1394. 二叉树的中序遍历 - 12.13145. 二叉树的后序遍历 - 12.13102. 二叉树的层序遍历 - 12.13107. 二叉树的层序遍历 II - 12.14递归算法三要素以前序遍历为例:1、确定递归函数的参数和返回值:因为要打印出前序遍历节点的数值,所以参数里需要传入List在放节点的数值,除了这一点就不需要在处理什么数据了也不需要有返回值,所以递归函数返回类型就是void,代码如下:void trave原创 2021-12-20 17:10:17 · 623 阅读 · 0 评论 -
算法题解(字符串篇)
文章目录*344. 反转字符串 - 12.2541. 反转字符串 II - 12.3剑指 Offer 05. 替换空格 - 12.3151. 翻转字符串里的单词 - 12.3*344. 反转字符串 - 12.2344. 反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。(独)解法一:将首尾元素交换一下即可。class Solution { pub原创 2021-12-13 11:05:33 · 1538 阅读 · 0 评论 -
算法题解(Leetcode 62、64:不同路径、最小路径和)
文章目录62. 不同路径 - 中等 - 10/862. 不同路径 - 中等 - 10/862. 不同路径 - 中等一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?解析: 动态规划可以看出,每一个格子被经过的次数就是左侧格子的次数 + 上方格子的次数题目中问总共有多少条不同的路径。如果我们知道怎么到达终点的上方,怎么到达原创 2021-12-02 17:52:18 · 215 阅读 · 0 评论 -
算法题解(哈希表篇)
文章目录哈希表理论基础242.有效的字母异位词349. 两个数组的交集202. 快乐数1. 两数之和哈希表理论基础首先什么是 哈希表,哈希表(英文名字为Hash table,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hash table就可以了)。哈希表是根据关键码的值而直接进行访问的数据结构。哈希表中关键码就是数组的索引下表,然后通过下表直接访问数组中的元素,如下图所示:哈希表能解决什么问题?一般哈希表都是用来快速判断一个元素是否出现集合里。例如要查询一个名字是否在原创 2021-12-02 11:13:17 · 501 阅读 · 0 评论 -
算法题解(贪心篇)
文章目录贪心理论基础贪心一般解题步骤455. 分发饼干 - 简单 - 10.27贪心理论基础贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。动态规划的原创 2021-11-16 15:16:20 · 554 阅读 · 0 评论 -
算法题解(回溯篇)
文章目录回溯算法模板77. 组合 - 中等 - 10.20216. 组合总和 III - 中等 - 10.2017. 电话号码的字母组合 - 中等 - 10.2139. 组合总和 - 中等 - 10.22回溯算法模板77. 组合 - 中等 - 10.2077. 组合 - 中等给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。class Solution { //保存结果 List<List<Intege原创 2021-10-27 09:37:40 · 167 阅读 · 0 评论 -
算法题解(链表篇)
文章目录链表基础链表基础什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点是又两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链接的入口点称为列表的头结点也就是head。链表的类型:单链表单链表中的节点只能指向节点的下一个节点。双链表双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。双链表 既可以向前查询也可以向后查询。循环链表循环链表,顾名思义,就是链表首尾相连。循环链表可以用来原创 2021-10-19 16:19:15 · 267 阅读 · 0 评论 -
算法题解(数组篇)
文章目录二分查找模板704. 二分查找 - 简单 - 10/1327. 移除元素 - 简单 - 10/13977. 有序数组的平方 - 简单 - 10/13209. 长度最小的子数组 - 中等 - 10/1359. 螺旋矩阵 II - 中等 - 10/13二分查找模板l 指针掌管左边蓝色区域, r 指针掌管右边红色区域,两者互不冲突,通过不断向目标元素靠近扩大掌管区域,直到两者掌管区域接壤。二分查找起始状态:二分查找终止状态:< 、≤ 、≥ 、> 目标元素对应的蓝红区域划分总结模板:例原创 2021-10-15 09:44:57 · 685 阅读 · 0 评论 -
算法题解(Leetcode 48、49、53、55、56:旋转图像、字母异位词分组、最大子序和、跳跃游戏、合并区间 )
文章目录48. 旋转图像 - 中等 - 9/2648. 旋转图像 - 中等 - 9/2648. 旋转图像 - 中等 - 9/26给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。解析:找规律,先按对角线交换,再按对称轴交换即可。class Solution { public void rotate(int[][] matrix) {原创 2021-10-08 09:37:50 · 157 阅读 · 0 评论 -
算法题解(Leetcode 33、34、39、42、46:搜索旋转排序数组、在排序数组中查找元素的第一个和最后一个位置、组合总和、接雨水、全排列 )
文章目录[33. 搜索旋转排序数组 - 中等 - 9/17](https://leetcode-cn.com/problems/search-in-rotated-sorted-array/)33. 搜索旋转排序数组 - 中等 - 9/17整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nu原创 2021-09-24 15:56:16 · 202 阅读 · 0 评论 -
算法题解(Leetcode 21、22、23、31、32:合并两个有序链表、括号生成、合并K个升序链表、下一个排列、最长有效括号 )
文章目录[21. 合并两个有序链表 - 简单 - 9/12](https://leetcode-cn.com/problems/merge-two-sorted-lists/)21. 合并两个有序链表 - 简单 - 9/12将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。解析:迭代:遍历两个链表。/** * Definition for singly-linked list. * public class ListNode { *原创 2021-09-16 10:38:53 · 127 阅读 · 0 评论 -
算法题解(Leetcode 11、15、17、19、20:盛最多水的容器、三数之和、电话号码的字母组合、删除链表的倒数第 N 个结点、有效的括号)
文章目录[11. 盛最多水的容器 9/7](https://leetcode-cn.com/problems/container-with-most-water/)11. 盛最多水的容器 9/7给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。解析:使用双指针,开始时,判断原创 2021-09-12 00:27:52 · 150 阅读 · 0 评论 -
算法题解(贪心)
文章目录分发饼干(8/2-455)分发饼干(8/2-455)解析:给一个孩子的饼干应当尽量小并且又能满足该孩子,这样大饼干才能拿来给满足度比较大的孩子。因为满足度最小的孩子最容易得到满足,所以先满足满足度最小的孩子。在以上的解法中,我们只在每次分配时饼干时选择一种看起来是当前最优的分配方法,但无法保证这种局部最优的分配方法最后能得到全局最优解。我们假设能得到全局最优解,并使用反证法进行证明,即假设存在一种比我们使用的贪心策略更优的最优策略。如果不存在这种最优策略,表示贪心策略就是最优策略原创 2021-09-10 11:22:36 · 668 阅读 · 0 评论 -
算法题解(LeetCode 6-10:Z 字形变换、整数反转、字符串转换整数(atoi)、 回文数、正则表达式匹配)
文章目录[6. Z 字形变换 9/2](https://leetcode-cn.com/problems/zigzag-conversion/)[7. 整数反转 9/3](https://leetcode-cn.com/problems/reverse-integer/)6. Z 字形变换 9/2将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA原创 2021-09-06 15:57:36 · 211 阅读 · 1 评论 -
算法题解(Leetcode 1-5:两数之和、两数相加、无重复字符的最长子串、寻找两个正序数组的中位数、最长回文子串)
文章目录1. 两数之和 8/271. 两数之和 8/27给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。解法一:暴力解决:遍历所有情况看相加是否等于目标和,如果符合直接输出。class Solution { public int[] twoSum(int[] nums, int原创 2021-09-01 14:24:23 · 162 阅读 · 0 评论 -
算法 - 附案例(二分查找 | 分治算法 | 动态规划 | KMP算法 | 贪心算法)
文章目录二分查找算法(非递归)分治算法二分查找算法(非递归)介绍代码实现:数组 {1,3, 8, 10, 11, 67, 100}, 编程实现二分查找, 要求使用非递归的方式完成.。/** * @author xdragon * @Description 二分查找的非递归实现 * @createTime 2021年08月12日 */public class BinarySearchNoRecur { public static void main(String[] args)原创 2021-08-13 17:26:21 · 646 阅读 · 0 评论 -
算法题解(排序)
文章目录1、数组中的第K个最大元素(7/28-215)2、1、数组中的第K个最大元素(7/28-215)解析:排序 :时间复杂度 O(NlogN),空间复杂度 O(1)class Solution { public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length - k]; }}堆 :时间复杂度 O(NlogK),空间复杂原创 2021-08-02 17:08:39 · 740 阅读 · 0 评论 -
算法题解 (双指针)
文章目录1、只出现一次的数字2、1、只出现一次的数字分析:使用异或,相同的数字异或得0,最后只剩下一个数字。a^a=0;自己和自己异或等于0a^0=a;任何数字和0异或还等于他自己abc=acb;异或运算具有交换律实现:class Solution { public int singleNumber(int[] nums) { int single = 0; for(int n : nums){ single ^= n;原创 2021-07-27 16:59:26 · 185 阅读 · 0 评论