![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法刷题
文章平均质量分 66
莫枢
永怀善意,清澈明朗~
展开
-
关于二叉树的一些有趣问题
关于二叉树的一些有趣问题leetcode341扁平化嵌套列表迭代器不难发现:class NestedInteger { Integer val; List<NestedInteger> list;}/* 基本的 N 叉树节点 */class TreeNode { int val; TreeNode[] children;}所以其实输入的就是一个类似于n叉树的结构。所要求的结果就是叶子结点的遍历结果。那么现在这个数据结构里面有两种形式,一种是整原创 2021-06-23 15:50:07 · 116 阅读 · 0 评论 -
序列化和反序列化——二叉树中的应用
序列化和反序列化——二叉树中的应用前序遍历实现序列化String SEP = ",";String NULL = "#";/* 主函数,将二叉树序列化为字符串 */public String serialize(TreeNode root) { StringBuilder sb = new StringBuilder(); serialize(root, sb); return sb.toString();}/* 辅助函数,将二叉树存入 StringBuilder原创 2021-06-23 15:48:53 · 65 阅读 · 0 评论 -
二叉树经典算法总结
二叉树经典算法总结二叉树和经典算法的关系实际上,快速排序就是个二叉树的前序遍历,归并排序就是个二叉树的后序遍历。下面详细说明。快速排序的逻辑是,若要对 nums[lo..hi] 进行排序,我们先找一个分界点 p,通过交换元素使得 nums[lo..p-1] 都小于等于 nums[p],且 nums[p+1..hi] 都大于 nums[p],然后递归地去 nums[lo..p-1] 和 nums[p+1..hi] 中寻找新的分界点,最后整个数组就被排序了。代码框架void sort(int[] nu原创 2021-06-23 15:47:43 · 569 阅读 · 0 评论 -
字符串刷题笔记
字符串刷题笔记541.反转字符串 II代码实现class Solution { public String reverseStr(String s, int k) { char[] a = s.toCharArray(); int i = 0; int j = 0; char tmp; for (int start = 0; start < a.length; start += 2 * k) { i原创 2021-05-01 09:07:09 · 114 阅读 · 1 评论 -
哈希表刷题笔记
哈希表刷题笔记1.LeetCode242有效的字母异位词——easy解题思路由于异位词都是由各个字符重复组成,所以为想到采用哈希表来存储数据方便比较,但是直接比较两个哈希表麻烦,所以想到先记录所需要比较的字符串,再用target字符串进行遍历删减哈希表,看最终哈希表的size是否为0即可,当然要是初始化好的哈希表不存在某一个target中的字符,可以直接退出遍历返回false。代码如下:代码实现class Solution { public boolean isAnagram(String原创 2021-05-01 09:05:39 · 146 阅读 · 1 评论 -
链表篇刷题模板总结一
链表篇刷题模板总结一一、递归反转整个链表解决思路为了有效解决可以采用迭代或者是递归的思想,这里主要探讨递归。毕竟人理解迭代,神理解递归哈哈。当然很多人说不要进入递归内部,不然会被绕晕,但是很多童鞋就是想不明白里面的原理,所以导致很难受(本人同感),所以这里也会代入到递归函数内部,讲一讲里面的原理。递归的三大要素第一要素:明确你这个函数想要干什么即函数的功能是什么第二要素:寻找递归结束条件即找出当参数为啥值时,结束递归,把结果返回第三要素:找出函数的等价关系式即不断缩小参数的范围对于递归原创 2021-04-10 17:22:46 · 140 阅读 · 0 评论 -
数组篇刷题模板总结五——数组去重
数组篇刷题模板总结五——数组去重LeetCode316题目描述代码实现class Solution { public String removeDuplicateLetters(String s) { // 声明计数器,因为是ASCII码,所以256够用 int[] count = new int[256]; // 声明单调栈 Stack<Character> stk = new Stack<>();原创 2021-04-01 10:59:18 · 133 阅读 · 0 评论 -
数组篇刷题模板总结四_其他技巧
数组篇刷题模板总结四——其他技巧常数时间插入、删除和获取随机元素题目描述解题思路根据题目要求,在查找时需要O(1)的时间复杂度,想到数组可以通过索引实现;但是删除和增加元素的话,除了数组末尾,其他地方进行两种操作都需要移动其他元素来实现。所以想到哈希表来辅助实现。代码实现class RandomizedSet { /** Initialize your data structure here. */ Map<Integer, Integer> dict; L原创 2021-04-01 10:58:09 · 127 阅读 · 0 评论 -
饕餮盛宴——滑动窗口(尺取法)
饕餮盛宴——滑动窗口(尺取法)注意:此章节作为复习使用,直接代码实现,不写思路。LeetCode1004代码实现class Solution { public int longestOnes(int[] A, int K) { int left = 0; int right = 0; int len = 0; // 0计数器 int K1= 0; int nums = 0; wh原创 2021-03-29 15:14:21 · 200 阅读 · 0 评论 -
数组篇刷题模板总结三_滑动窗口
数组篇刷题模板总结三——滑动窗口滑动窗口模板public void slidingWindow(string s, string target) { HashMap<Character, Integer> need = new HashMap<>(); HashMap<Character, Integer> window = new HashMap<>(); for (char c : t.toCharArray()) {原创 2021-03-04 22:49:59 · 109 阅读 · 1 评论 -
数组篇刷题模板总结二_双指针
数组篇刷题模板总结——双指针双指针通常出现在数组和链表里面,可以将双指针粗略分为两类,一类是快慢指针,一类是左右指针。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。后文将详细探讨和总结。快慢指针快慢指针一般都初始化指向链表的头结点 head,前进时快指针 fast 在前,慢指针 slow 在后,巧妙解决一些链表中的问题。1、判定链表中是否含有环题目描述给定一个链表,判断链表中是否有环。解题思路通过快慢指针进行辅助判断。若链原创 2021-03-01 22:55:12 · 100 阅读 · 0 评论 -
数组篇刷题模板总结一_二分查找
数组篇刷题模板总结一——二分查找二分查找(细节是魔鬼)二分查找模板二分查找可以分为三种格式,此处将三种方式总结为一种通用模板,方便记忆。查找某个数在有序数组中的位置查找某个数在有序数组中的左侧边界查找某个数在有序数组中的右侧边界//查找某个数在有序数组中的位置public int binarySearch(int[] nums; int target) { if (nums.length <= 0) { return -1; } int le原创 2021-02-28 18:18:37 · 180 阅读 · 1 评论 -
算法刷题及总结_数组篇拓展
算法刷题及总结_数组篇拓展1.剑指 Offer 03. 数组中重复的数字【难度指数:★☆☆】题目描述在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000方法一(暴力法)解题思路没什么好说的,暴力法,双循环解决。[]( ̄▽ ̄)*原创 2021-02-14 14:54:00 · 349 阅读 · 0 评论 -
算法刷题及总结_数组篇
二分法//算法总结//第一部分:数组相关/***Leetcode题目35:搜索插入位置*给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。*示例 1:*输入: [1,3,5,6], 5*输出: 2**示例 2:*输入: [1,3,5,6], 2*输出: 1*///解法一:暴力法 | 时间复杂度:O(n) 空间复杂度:O(1)public int searchInsert(int[] nums, int tar原创 2021-02-08 17:06:45 · 171 阅读 · 0 评论