随笔分类 - 数据结构和算法
摘要:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其
阅读全文
摘要:这个题目虽然说只有简单难度,但是实际上这个题目的难度很大。尤其是这种双指针的做法,很少有人能够想到。 我们可以设立一个快指针和一个慢指针,快指针在数组的第二个位置,也就是index=1的时候,慢指针在第一个位置,也就是在index=0的时候。 当快指针和慢指针所指向的元素的大小不相同的时候,慢指针就
阅读全文
摘要:答案: class Solution: def sortColors(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ p0, cur, p2 = 0, 0, l
阅读全文
摘要:这道题我看了解答感觉不是很对,因为并没有实现原地对数组进行修改。但还是记录一下,这种解题方法还是很值得学习的。 题目如下: 解答的方法如下: class Solution: def removeElement(self, nums: List[int], val: int) -> int: #原地移
阅读全文
摘要:这个题目利用二叉搜索树的性质,一下子就简单得令人发指了,第k小的元素,正好就是对二叉搜索树进行中序遍历时的第k个元素,因此我们直接使用中序遍历,时间复杂度O(n),即可得到答案,代码如下: # Definition for a binary tree node. # class TreeNode:
阅读全文
摘要:题目如下: 这个题目很有意思,就是我们可以先用先序遍历遍历整棵树,然后再重新进行原地修改,就可以了。代码如下: # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None,
阅读全文
摘要:本题目如下: 这题目和二叉树的最大深度的题目有异曲同工之妙,代码如下: # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.
阅读全文
摘要:这道题也是对102的一个变体,非常简单,我们只需要将拿到的res数组进行逆序,就可以了。题目如下: 代码如下; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None,
阅读全文
摘要:这个题目和leetcode102的题目非常类似,我们只需要对leetcode102的代码稍作修改就可以得到最终的答案了,我们来看看leetcode102的代码: class Solution: def levelOrder(self, root: TreeNode) -> List[List[int
阅读全文
摘要:这个题目比较基础,可以对树的广度优先搜索的模版稍作更改,就可以得到我们的答案了。题目如下: 解答如下: # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, righ
阅读全文
摘要:广度优先遍历 广度遍历又叫层次遍历。用队列实现,依次将根,左子树,右子树存入队列,按照队列的先进先出规则来实现层次遍历。 # 层次遍历(广度优先) def BFS(root): if root: res = [] queue = [root] while queue: currentNode = q
阅读全文
摘要:题目如下: 本题目的思路基本和105题的思路是相同的,主要要注意进行divide和conqure的时候,index的下标要调整正确,记住python是左闭右开的。 代码如下: # Definition for a binary tree node. # class TreeNode: # def _
阅读全文
摘要:这题目是有一个常见的套路的,由于先序遍历的结果list都会遵循这样的一个排列方式,也就是第一个是root,后面的分别是左子树的node的集合,以及右子树的node的集合。 [ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ] 而inorder中序遍历的结果则是: [ [左子树的中序
阅读全文
摘要:这个题目居然是简单难度,吓了我一跳,本来一看到这个题目,我还一时半会儿没有想出来,后来想想这个题目可以作为模版题目,必须搞明白的题目,也就释然了。因为这个题目当中蕴含的思想非常经典,是一种典型的建立平衡二叉搜索树的方法,本题目的方法还可以推广到其他题目。可以多用于熟悉建立平衡二叉树。既然提到了平衡二
阅读全文
摘要:这个题目直接递归就行,难度不大,就是要考虑全面一些哦,这道题应该也是剑指offer的原题 ,复习一下,挺简单的,代码如下: # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=
阅读全文
摘要:题目如下: 本题目的精华在于不要用一个for循环遍历整个linked list,而是使用两个for或者三个for对同一个linked list从前到后进行遍历,同样也只遍历O(the number of nodes)=O(N)次,我尝试过仅使用一个while循环来写,虽然也是o(n),但是在穿针引线
阅读全文
摘要:题目如下: 本题目可以引入两个变量,一个变量pre,一个变量instant,这两个既是变量,也是指针,我们用head指针不断往后进行移动,每往后移动一次,instant变量就保存当前head的指针,然后instant.next指向pre指针 ,然后将instant的地址赋予pre指针,这样pre就做
阅读全文
摘要:题目如下: 这个题目,一看可以把链表的nods全部拿到,放到set哈希表里面,也可以放在list里面,然后循环判断是否有两个地址相同的node,但是由于时间的限制只能在o(n)以内,因此我们可以采用哈希表,也就是python里面的set来做这道题,解答如下: # Definition for sin
阅读全文
摘要:题目如下: 这个题目的要求让我们在O(n) time内完成,空间复杂度为O(1),因此我们只能遍历一次,然后使用常数个变量,因此我们立马就会想到使用两个变量,一个用于保留奇数链表的指针,另一个用来保留偶数链表的指针,然后我们遍历整个head 链表,遇到奇数就将奇数指针往后移动,遇到偶数也分别往后移动
阅读全文
摘要:题目如下: 本体可以直接使用简介形解法: # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = nex
阅读全文