
算法刷题
文章平均质量分 56
个人完成题目练习
小智RE0-走在路上
慎独
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基础链表问题练习2
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。原创 2022-03-10 17:03:23 · 457 阅读 · 0 评论 -
基础链表问题练习1
https://leetcode-cn.com/explore/learn/card/linked-list/建议先学习学习 力扣链表入门原创 2022-02-21 23:28:44 · 372 阅读 · 0 评论 -
基本数组题练习
文章目录1: LC8 字符串转换整数2: LC13 罗马数字转整数3: LC 加一4: LC 二进制求和5: LC 只出现一次的数字6: LC 137. 只出现一次的数字 II7: LC 189. 轮转数组8: LC 240. 搜索二维矩阵 II10: LC 448. 找到所有数组中消失的数字1: LC8 字符串转换整数原题位置:8. 字符串转换整数 (atoi)请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 ato原创 2022-02-21 15:47:15 · 762 阅读 · 0 评论 -
双指针问题复习
文章目录1.力扣[344]反转字符串2.力扣345:反转字符串中的元音字母3.力扣125:验证回文串4.力扣: 两数之和 II - 输入有序数组5.力扣[11] 盛水最多的容器问题6.力扣[15] : 三数之和7.力扣[16] : 接近的三数之和8.力扣[18] 四数之和9.力扣[881] 救生艇10.力扣[633] 平方数之和一般使用的双指针;对撞指针:在一段数据中的开头和结尾,两个指针分别出发;快慢指针:两个指针从左端同时出发; 一个指针移动快,一个指针移动慢;练习使用1.力扣[原创 2022-02-13 00:56:20 · 268 阅读 · 0 评论 -
滑动窗口问题复习
文章目录1.基础题入手1.1 力扣[3]: 无重复字符的最长子串1.2 力扣[209]: 长度最小的子数组2.其他题2.1 力扣[424] :替换后的最长重复字符2.2 力扣[76] : 最小覆盖子串2.3 力扣[438] :找到字符串中所有字母异位词2.4力扣[ 567]字符串的排列当然可以在B站找一些教学视频学习红桃A士算法古城算法教学简单来说;滑动窗口的思想就是(1)当不满足当前的条件时,向右扩充,当满足条件时,向右收缩左边界,得到一个解后暂时保存,(2)循环第一步,又得到一原创 2022-02-12 17:02:44 · 667 阅读 · 0 评论 -
二分查找算法复习
首先二分查找算法是要基于当前数组为有序数组;实际就是每次找中心点的值; 若目标数等于中心点了,直接返回即可,若目标数小于中间数,则在中心点的左侧查找,反之则在中心点的右边查找.在实际的使用中,二分查找可以用不同模板的方式实现,那么具体在判断中心点时的规则就不一样.从经典的基本问题入手;力扣原题704. 二分查找;class Solution { public int search原创 2022-02-11 14:09:44 · 907 阅读 · 0 评论 -
归并排序练习
力扣88. 合并两个有序数组链接:https://leetcode-cn.com/problems/merge-sorted-array/class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { //使用临时数组,先将数组排序到其中; int[] temp = new int[m+n]; //临时数组的指针index; int ind.原创 2022-02-10 13:47:16 · 739 阅读 · 0 评论 -
循环链表与约瑟夫链表问题
文章目录链表的最后一个节点指向第一个节点,形成一个环状的链表;模拟实现约瑟夫问题package com.xiaozhi.day03linkedlist.josephquestion;/** * @author by @CSDN 小智RE0 * @date 2021-12-23 */public class JosephQuestion { //节点类; static class ListNode { int val; ListNode ne原创 2021-12-23 15:18:32 · 279 阅读 · 0 评论 -
栈的简易实现
栈的简易实现简单实现栈的结构;底层结构采用链表的节点;package com.xiaozhi.day04stack;import java.util.Iterator;/** * @author by @CSDN 小智RE0 * @date 2021-12-2 */public class MyStack<T> implements Iterable<T>{ class ListNode{ //数据域; public T原创 2021-12-30 23:45:00 · 347 阅读 · 0 评论 -
[单向链表与双向链表的实现]
文章目录单向链表双向链表学过Java基础集合的话,就知道链表啊;它增删比较快,查询较慢;它是物理存储单元上非连续、非顺序的存储结构比如我要给这个链表的14和6之间增加新节点56;将预备添加位置的前一个结点指针指向到它即可;那么这里准备删除节点节点8呢,操作差不多,指针指向调整一下,它就完美脱离链表了;链表这块的话,其实就是在操作它的指针指向;不要觉得非常难哦单向链表每个结点都由数据域和指针域组成,头结点的数据域不存储数据,数据域:真实存储数据,指针域:存储后继结点。pack原创 2021-12-23 11:23:25 · 699 阅读 · 0 评论 -
单链表反转,快慢指针解决链表的常见问题
线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素与其直接后继数据元素 之间的逻辑关系…原创 2021-12-23 14:26:53 · 812 阅读 · 0 评论 -
LeetCode(20) ---[有效的括号](Java)
题目来源链接:有效的括号题目说明:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例:示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}.原创 2021-07-22 22:50:05 · 149 阅读 · 0 评论 -
LeetCode(27)---[移除元素](Java)
题目来源:移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。不需要考虑数组中超出新长度后面的元素。案例:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例原创 2021-07-23 15:29:18 · 130 阅读 · 0 评论 -
LeetCode ( 1 )---两数之和(Java)
题目来源链接:LeetCode 1—两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:原创 2021-07-23 15:35:14 · 139 阅读 · 1 评论 -
LeetCode ( 26 ) ---[删除有序数组中的重复项](Java)
题目来源:删除有序数组中的重复项定义两个索引 i 和 j;i 从 0 开始; j 从 1 开始;当 i与 j 匹配元素相等时,索引 j 就保持向后移动;若 i 与j匹配元素不相等; i 后移一位; 将索引 j 的匹配元素的值赋值给索引 i 匹配元素的值; j 向后移动;最终要返回的是元素个数;所以为 i 加1位;class Solution { public int removeDuplicates(int[] nums) { int i = 0;原创 2021-07-24 12:50:26 · 124 阅读 · 0 评论 -
LeetCode ( 203 ) ---[移除链表元素]
题目来源:LeetCode ( 203 )—移除链表元素定义虚拟头结点;使得一个结点作为标记去遍历链表;取到的是待删除结点的前一个结点,将匹配到 val值的结点删除后,删除结点的前一个结点 指向 变为删除结点的后一个结点.而删除的结点指向为null/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode()原创 2021-08-10 22:44:05 · 141 阅读 · 1 评论 -
剑指[32]-(1)由上至下打印二叉树
题目来源:剑指 Offer 32 - I. 从上到下打印二叉树题目描述从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]提示:节点总数 <= 1000先排除空树的情况,直接返回空数组;根据队列可以先入先出的结构,创建队列时就把二叉树的根结点存入;在队列不为空的前提下,就把队原创 2021-11-12 12:53:34 · 110 阅读 · 0 评论 -
剑指[32]-(2)由上至下打印二叉树
题目来源:剑指 Offer 32 - II. 从上到下打印二叉树 II题目描述从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]] 提示:节点总数 <= 1000本次题目和上次的思路相同,但是返回值略有不同,每次遍历取出一层元原创 2021-11-12 13:24:22 · 577 阅读 · 0 评论 -
剑指[32]-(3)由上至下打印二叉树
题目来源:剑指 Offer 32 - III. 从上到下打印二叉树 III题目描述请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [20,9], [15,7]] 提示:节点总数 <原创 2021-11-12 19:24:45 · 568 阅读 · 0 评论 -
剑指[26]_树的子结构
题目来源:剑指 Offer 26. 树的子结构题目描述输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:原创 2021-11-13 13:56:46 · 110 阅读 · 0 评论 -
剑指[27]_二叉树的镜像
题目描述:剑指 Offer 27. 二叉树的镜像题目描述请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4 / \ 2 7 / \ / \1 3 6 9镜像输出: 4 / \ 7 2 / \ / \9 6 3 1示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1] 限制:0 <= 节点个数 <= 1000直接递原创 2021-11-13 14:40:07 · 111 阅读 · 0 评论 -
剑指[28]_对称的二叉树
题目来源:剑指 Offer 28. 对称的二叉树题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 示例 1:输入:root = [1,2,2原创 2021-11-13 15:28:10 · 1037 阅读 · 0 评论 -
剑指[35]__复杂链表的复制
题目来源:剑指 Offer 35. 复杂链表的复制题目描述:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 ne原创 2021-11-13 15:59:50 · 119 阅读 · 0 评论 -
剑指[63]_股票的最大利润问题 ; 力扣[122]_买卖股票的最大利润时机 II
题目来源:题目来源:剑指 Offer 63. 股票的最大利润本题与力扣121题相同: 121.买卖股票的最佳时机题目描述:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6原创 2021-11-14 19:13:11 · 147 阅读 · 0 评论 -
剑指[42]_最大子序列之和(连续子数组的最大和)
题目来源:剑指 Offer 42. 连续子数组的最大和题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1原创 2021-11-15 23:05:59 · 1009 阅读 · 0 评论 -
剑指[48]_最长的不包含重复字符的子字符串
题目来源:剑指 Offer 48. 最长不含重复字符的子字符串题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3原创 2021-11-17 14:04:06 · 383 阅读 · 0 评论 -
剑指[58]--(1)--翻转单词的顺序
题目来源:剑指 Offer 58 - I. 翻转单词顺序题目描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。示例 1:输入: "the sky is blue"输出: "blue is sky the" 示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含原创 2021-11-20 12:13:39 · 521 阅读 · 0 评论 -
剑指[54]_找出二分搜索树的第K大节点
题目来源:剑指 Offer 54. 二叉搜索树的第k大节点题目描述给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4 示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 4 限制:1 ≤原创 2021-11-22 14:06:56 · 498 阅读 · 0 评论