![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和数学
文章平均质量分 90
是七叔呀
Java、python、C
展开
-
二分查找的两种写法
二分查找的两种写法转载 2022-08-19 22:33:03 · 208 阅读 · 0 评论 -
Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历
Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历原创 2022-08-01 13:57:07 · 168 阅读 · 0 评论 -
LeetCode 70爬楼梯、199二叉树的右视图、232用栈实现队列、143重排链表
时间复杂度O(n)。深度优先搜索最多访问每个结点一次,因此是线性复杂度。空间复杂度O(n)。最坏情况下,栈内会包含接近树高度的结点数量,占用O(n)的空间。原创 2022-07-23 20:31:00 · 83 阅读 · 0 评论 -
Leetcode 20有效的括号、33搜索旋转排序数组、88合并两个有序数组(nums1长度为m+n)、160相交链表、54螺旋矩阵、415字符相加(不能直接转Int)、reverse()函数
时间复杂度O(n)。n为字符串长度空间复杂度O(n+∣Σ∣),其中\SigmaΣ表示字符集,本题中字符串只包含66种括号,|\Sigma|=6∣Σ∣=6。栈中的字符数量为O(n)O(n),而哈希表使用的空间为O(|\Sigma|)O(∣Σ∣),相加即可得到总空间复杂度。..............................原创 2022-07-21 16:15:45 · 375 阅读 · 0 评论 -
Leetcode 206反转链表、3无重复字符的最长子串、912排序数组(快排)、215数组中的第k个最大元素、53最大子数组和、152乘积最大子数组、121买卖股票的最佳时机1和2
此时链表为1->2->34原创 2022-07-20 17:21:32 · 199 阅读 · 0 评论 -
二分法、快速排序、归并排序、堆排序代码实现及测试
该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是。核心点最好情况下,每一次划分分区都正好将数组分成长度相等的两半(nlgn)核心点最坏情况下,每一次划分分区都将数组分成了0和n-1两部分(n的平方)首先简单了解下堆结构。...原创 2022-04-19 15:38:39 · 845 阅读 · 0 评论 -
Leetcode 208实现Trie、287寻找重复数、1038从二叉搜索树到更大和树/累加树(children数组每个下标都存一个new Trie()对象)(假设只有一个重复数Floyd 判圈算法)
题目描述Trie(发音类似“try”)或者说前缀树是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。原创 2022-07-19 18:38:56 · 128 阅读 · 0 评论 -
Leetcode 48旋转图像(水平+主对角线)、Leetcode 221最大正方形(动态规划dp表示以ij为右下角的答案值)、Leetcode 240搜索二维矩阵II(排除行列法)
时间复杂度O(m+n)。在搜索的过程中,如果我们没有找到target,那么我们要么将y减少11,要么将x增加11。由于(x,y)的初始值分别为(0,n−1),因此y最多能被减少n次,x最多能被增加m次,总搜索次数为m+n。空间复杂度O(1)。常数级空间复杂度。...原创 2022-07-19 16:59:59 · 87 阅读 · 0 评论 -
LeetCode 560和为 K 的子数组(有负数、一次遍历前缀和)、LeetCode 438找到字符串中所有字母异位词(优化滑动窗口)、LeetCode 141环形链表I(快慢指针)、142II
题目描述:给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的的个数 。示例 1:输入:nums = [1,1,1], k = 2输出:2解释:连续子数组[1, 1]和[1, 1]示例 2:输入:nums = [1,2,3], k = 3输出:2解释:连续子数组[1, 2]和[3]如下:假如我们把4换成7,那么下一次会有两个满足条件的子数组。。。。题目描述:给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不原创 2022-07-18 17:52:21 · 160 阅读 · 0 评论 -
最长回文子串、LRU缓存机制(写双向链表、get和put)、排序链表、合并两个有序链表(迭代)
最长回文子串、LRU缓存机制(写双向链表、get和put)、排序链表、合并两个有序链表(迭代)原创 2022-04-15 10:34:24 · 382 阅读 · 0 评论 -
LeetCode 300最长递增子序列(贪心 + 二分查找比nums[i]小的第一个元素下标)、LeetCode 200岛屿数量(深搜)、LeetCode 494目标和(dfs回溯)
题目描述:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7,7,原创 2022-07-18 11:23:02 · 414 阅读 · 0 评论 -
LeetCode 144二叉树的前序遍历、102二叉树的层序遍历(广度优先)、103二叉树的锯齿形层状遍历、114二叉树展开为链表、139单词拆分(动态规划)
题目描述:给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]题目描述:给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。示例1:输入:root = [1,2,5,3,4,null,6原创 2022-06-10 15:53:07 · 87 阅读 · 0 评论 -
LeetCode 128最长连续序列(哈希set)
Top1:LeetCode 128最长连续序列(哈希set)【数组中可以有重复数字,大那是会用set去重不影响】题目描述:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例 1:输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。示例 2:输入:nums = [0,3,7,2,5,8,4,6,0,1]输原创 2022-05-28 11:23:27 · 126 阅读 · 0 评论 -
LeetCode 31下一个排列、LeetCode 64最小路径和、LeetCode 62不同路径、LeetCode 78子集、LeetCode 33搜索旋转排序数组(修改二分法)
LeetCode 31下一个排列题目描述:以数字序列 [1,2,3][1,2,3] 为例,其排列按照字典序依次为:[1,2,3]\ [1,3,2]\ [2,1,3]\ [2,3,1]\ [3,1,2]\ [3,2,1][1,2,3][1,3,2][2,1,3][2,3,1][3,1,2][3,2,1]这样,排列 [2,3,1][2,3,1] 的下一个排列即为 [3,1,2][3,1,2]。特别的,最大的排列 [3,2,1][3,2,1] 的下一个排列为最小的排列 [1,2,3][1,2,原创 2022-05-24 22:23:31 · 1016 阅读 · 0 评论 -
LeetCode 46全排列(递归的时间复杂度和空间复杂度)、list中方法的时间复杂度、LeetCode 48旋转图像、LeetCode 47全排列II(针对含重组元素的nums)
LeetCode 46全排列(不含重复数字的数组nums)题目描述:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]一、使用dfs,for循环加Collections原创 2022-05-19 21:32:27 · 1272 阅读 · 0 评论 -
LeetCode 451根据字符出现的频率排序、LeetCode 228汇总区间、LeetCode 2两数相加、LeetCode 19删除链表的倒数第 N 个结点、LeetCode 22括号生成DFS
LeetCode 451根据字符出现的频率排序题目描述:给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。返回 已排序的字符串 。如果有多个答案,返回其中任何一个。示例 1:输入: s = “tree”输出: “eert”解释: 'e’出现两次,'r’和’t’都只出现一次。因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。示例 2:输入: s = “cccaaa”输出: “cccaaa”解释:原创 2022-05-10 15:31:53 · 284 阅读 · 0 评论 -
LeetCode 424替换后的最长重复字符、LeetCode 24两两交换链表中的节点、LeetCode 215数组中的第K个最大元素、LeetCode 53最大子数组和、LeetCode46全排列
LeetCode 424替换后的最长重复字符题目描述:给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。在执行上述操作后,返回包含相同字母的最长子字符串的长度。示例 1:输入:s = “ABAB”, k = 2输出:4解释:用两个’A’替换为两个’B’,反之亦然。示例 2:输入:s = “AABABBA”, k = 1输出:4解释:将中间的一个’A’替换为’B’,字符串变为 “AABBBBA”。子串 “B原创 2022-05-03 10:41:11 · 675 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数(找到数组中两个只出现一次的数字)找到小镇的法官、课程表(拓扑排序)、乘积最大连续子数组、从前序与中序遍历序列构造二叉树(元素唯一)
目录剑指 Offer 56 - I. 数组中数字出现的次数(找到数组中两个只出现一次的数字)异或的运算法则:一、ret最终答案就是那两个只出现一次的的数异或的结果二、找到ret二进制数中第几位是1三、我们假设就以第一个二进制位为划分标准。(其实target其他位如果有1也可以作为分界线,但是为了防止万一只有一位不同还是选择第一个为1的位)剑指 Offer 56 - I. 数组中数字出现的次数(找到数组中两个只出现一次的数字)异或的运算法则:1. a ⊕ a = 02.原创 2022-03-30 15:03:39 · 494 阅读 · 0 评论 -
LeetCode 18四数之和、LeetCode 17电话号码的字母组合、LeetCode 347前k个高频元素、LeetCode 34在排序数组中查找元素的第一个和最后一个位置、39 组合总和
LeetCode 18四数之和题目描述:给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例原创 2022-05-16 21:19:17 · 280 阅读 · 0 评论