随笔分类 -  数据结构和算法

摘要:题目如下所示: 这个题目也就是你一遇到一个node符合要求,你就可以将其删除。是一个比较简单的基础题目,用于熟悉链表当中的最基本操作。我们可以使用如下的方法,也就是暴力法,遍历整个linked list,然后将所有的nodes保存到一个list里面,对不符合要求的values进行排除,然后再重新建立 阅读全文
posted @ 2021-08-28 09:26 Geeksongs 阅读(56) 评论(0) 推荐(0)
摘要:题目如下,这里做一个记录: 思路: 1.首先使用快慢指针知道中点 2.然后使用递归得到avl平衡二叉树,因为中点作为root后,正好可以满足二叉搜索树的性质,也就是right node一定比left node更大,同时也可以满足avl平衡二叉树的性质,左右两边最多相差一个node。 # Defini 阅读全文
posted @ 2021-08-27 00:28 Geeksongs 阅读(46) 评论(0) 推荐(0)
摘要:这道题非常经典,其中快慢指针的思想可以覆盖到很多有链表的题目,值得深刻钻研,我们来看看这道题的原题是什么样的: 也就是说,我们需要找到一个链表当中的中间元素。如果linked list的nodes个数为偶数,则返回中间的那个node,如果linked list的nodes为奇数,则返回第二个中间节点 阅读全文
posted @ 2021-08-25 20:56 Geeksongs 阅读(32) 评论(0) 推荐(0)
摘要:题目如下所示: 这个题目我使用字典的方法对其进行了处理,什么意思呢? 就是首先遍历这个链表,然后使用字典统计每一个数字出现的次数,如果出现的次数大于了1次,那么则将其排序后放到我们新创建的链表里,代码如下: # Definition for singly-linked list. # class L 阅读全文
posted @ 2021-08-25 19:53 Geeksongs 阅读(34) 评论(0) 推荐(0)
摘要:题目如下: 整个题目可以建立一个dummy variable用于储存我们新的用于返回的指针,这个variable也是一个node,我们用这个dummy variable来和head当中的value进行比较,如果相同,则dummy variable保持不变,同时head往后移动一个node。如果不相同 阅读全文
posted @ 2021-08-23 23:10 Geeksongs 阅读(38) 评论(0) 推荐(0)
摘要:题目如下所示: 这题目一看,如果不使用solution所提供的成环,或者快慢指针的办法,则可以直接使用遍历整个链表,将数字储存在一个list里面,然后对这个list进行处理成order和rotate linked list数字order一致的list,然后再将这个list储存进入新创建的linked 阅读全文
posted @ 2021-08-22 22:06 Geeksongs 阅读(39) 评论(0) 推荐(0)
摘要:这道题一看其实可以使用最大堆的方式来完成。使用最大堆来解决本题的时间复杂度为:o(mn*log(k)),这样虽然很巧妙,但是由于还乘上了logk的缘故时间反而慢了。因此我们可以直接通过直接对这个二维数组lists进行遍历,这样就可以得到一个sorted的数组。因此使用sort这个函数,也就是快速排序 阅读全文
posted @ 2021-06-28 16:04 Geeksongs 阅读(42) 评论(0) 推荐(0)
摘要:方法一: 这个题目首先一看就有两个方法,一个是使用基于树的算法,也就是heap堆排序,经过一番奇巧淫技之后,时间复杂度是O(n*log k)。另一个就是使用数组的算法,可以选择的算法有选择排序O(n^2),快速排序O(nlogn),冒泡排序O(n^2)或者插入排序O(n^2)等等。那么本题目最快的方 阅读全文
posted @ 2021-04-20 16:59 Geeksongs 阅读(300) 评论(2) 推荐(0)
摘要:这个题目有两种比较常用的方法,一种是暴力解法,时间复杂度是O(mn),一种是KMP算法,由于KMP算法一般都是ACM竞赛才会使用到,因此这里这里只提供Python的暴利解法。 题目如下: 使用Python暴利解答的代码如下: class Solution: def strStr(self, hays 阅读全文
posted @ 2021-04-20 16:10 Geeksongs 阅读(46) 评论(0) 推荐(0)
摘要:对于广度优先遍历而言,我们可以用迭代的方法轻松求解,但是对于递归,就很难了,也很难记忆 ,因此这里给出BFS的迭代解法,这个function会根据BFS的顺序依次打印出我们访问的节点,有点小trick,代码如下: def bfs_level_order_traversal(node): if nod 阅读全文
posted @ 2021-04-08 13:28 Geeksongs 阅读(771) 评论(0) 推荐(0)
摘要:这题目一看就会有两种思路,一种是简单的DFS深度优先遍历,时间复杂度为O(n),每遍历到一个节点就增加sum incremented by 1,另一种方法就是从the last node开始算起,从下往上进行递归(这样才能够运用到完全二叉树的性质),但是我这里为了速度做出题目就直接使用DFS就可以求 阅读全文
posted @ 2021-04-08 13:21 Geeksongs 阅读(57) 评论(0) 推荐(0)
摘要:这题一看实在是太简单了,只要判断我们当前指针所在的元素是否已经被访问过就好。因此有第一种方法: 方法一: 使用数组储存我们访问过的所有元素,然后遍历我们访问过的所有元素和当前指针所在的元素进行比较,如果有地址一样的,就返回True说明是环形链表,不然就返回False,说明不是环形链表。时间复杂度为O 阅读全文
posted @ 2021-04-08 13:07 Geeksongs 阅读(72) 评论(0) 推荐(0)
摘要:这个题告诉我在recusive的function里,你return任何value都是没啥用的,需要用数组才能够记录下来我们需要的值。这个题也很简单,最简单的就是使用倒叙进行inorder遍历就可以了,代码如下: # Definition for a binary tree node. # class 阅读全文
posted @ 2021-04-07 15:49 Geeksongs 阅读(42) 评论(0) 推荐(0)
摘要:这个题目是一个十分经典的题目,需要我们验证一个二叉搜索树是否是有效的。如果这是一个有效的二叉搜索树,那么一定需要满足这样的条件: 每一棵subtree的所有left subtree都比root要小,每一棵right subtree都要比root要大,因此我们可以写出这样的代码: # Definiti 阅读全文
posted @ 2021-04-07 14:46 Geeksongs 阅读(60) 评论(0) 推荐(0)
摘要:这题目乍一看就感觉特别简单,我首先想出了一个时间复杂度为O(n^2)的算法,也就是按照平常的方式进行中序遍历,每遇到一个node就在这个node后面继续往后进行中序遍历,得到其累加和。但是想了想完全可以从后往前进行中序遍历,这样只是多出了一个空间复杂度,需要多余的空间来储存sum变量,但是时间上就省 阅读全文
posted @ 2021-04-07 13:45 Geeksongs 阅读(56) 评论(0) 推荐(0)
摘要:这题我最开始想直接用递归和二叉树的左小,右边大的性质,快速得解。左子树和右子树分别看作一条链表,然后讲左子树接在右子树的上面,而左子树当中的最大元素始终比右子树的最小元素要小。没想到代码竟然无法编译通过,错误解答如下: # Definition for a binary tree node. # c 阅读全文
posted @ 2021-04-07 09:06 Geeksongs 阅读(89) 评论(0) 推荐(0)
摘要:# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self. 阅读全文
posted @ 2021-04-05 21:21 Geeksongs 阅读(48) 评论(0) 推荐(0)
摘要:当需要进行两次循环嵌套时,我们常常使用双指针法,直接将时间复杂度O(n^2)降低到O(n), 这个是做题时候的一个技巧,一看到两个循环,就需要想到双指针! 写下记录一下,以免之后做题的时候忘记了 阅读全文
posted @ 2020-12-13 20:23 Geeksongs 阅读(59) 评论(0) 推荐(0)
摘要:题目描述: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。 示例: 输入:["MinStack","pu 阅读全文
posted @ 2020-12-12 12:21 Geeksongs 阅读(220) 评论(0) 推荐(0)
摘要:题目: 解题思路:首先对两个链表进行遍历,然后将数字转化为字符串加起来 然后对整个字符串进行逆序,在逆序的同时赋值给新创建的链表 代码如下: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): 阅读全文
posted @ 2020-09-05 21:50 Geeksongs 阅读(1942) 评论(0) 推荐(0)

Coded by Geeksongs on Linux

All rights reserved, no one is allowed to pirate or use the document for other purposes.