
数据结构算法和LeetCode
文章平均质量分 81
LeetCode
_illusion_
知乎主页:https://www.zhihu.com/people/illusions-29/posts
展开
-
算法第四版习题1.3.14和1.3.19(Java实现)
近来在啃数据结构与算法,欢迎交流。 1.3.14:用可变长度的数组实现队列(FIFO)数据结构ResizingArrayQueueOfStrings 的实现:public class ResizingArrayQueueOfStrings { String[] arr; int N; public ResizingArrayQueueOfStrings(int cap) ...原创 2018-09-20 14:23:27 · 403 阅读 · 0 评论 -
【python数据结构与算法】【剑指offer】字符串的排列
题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba,且要求输出字符串按序排列,不可重复 思路:其实排列问题的思路很简单,有点类似《剑指offer》里那道“青蛙跳台阶”的题目,即——对于字符串长度为n的情况,将第一位的情况固定后,剩下的就是(n-1)长度...原创 2018-10-22 22:09:41 · 377 阅读 · 0 评论 -
【python数据结构与算法】几种排序算法:冒泡排序、快速排序
以下排序算法,默认的排序结果是从小到大。一.冒泡排序:1.冒泡排序思想:越大的元素,就像越大的气泡。最大的气泡才能够浮到最高的位置。具体来说,即,冒泡排序有两层循环,外层循环控制每一轮排序中操作元素的个数——冒泡排序每一轮都会找到遍历到的元素的最大值,并把它放在最后,下一轮排序时便不再遍历它;内层循环是根据数值大小来交换数对——谁更大,谁就会被换到后面去。2.代码如下:d...原创 2018-10-17 00:37:16 · 344 阅读 · 0 评论 -
【Python数据结构与算法】【剑指offer】顺时针打印矩阵
题目描述与链接:https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 输入...原创 2018-11-22 16:53:42 · 196 阅读 · 0 评论 -
【python数据结构与算法】链表——链表中环的入口节点、两个链表的第一个公共节点(相交链表)
如题,这类问题在LeetCode上和剑指offer上总共有这些涉及:LeetCode:141,142,160 剑指offer:两个链表的第一个公共节点(默认是无环单链表)、链表中环的入口节点 补充:两个未知是否有环的单链表第一个公共节点我直接叙述第三个问题,也就是补充问题。因为问题3包含了:判断链表是否有环(输出环的入口节点)、无环单链表相交的问题,以及两个有环单链表的相交问题、一个有环...原创 2019-01-03 12:40:29 · 431 阅读 · 0 评论 -
【python数据结构与算法】LeetCode:反转链表
题目链接:https://leetcode-cn.com/problems/reverse-linked-list/介绍一下反转链表的思路:首先,先明确一下输入:输入为一个链表的头结点head具体步骤:先判断头结点或头结点的next属性head.next 是否为None。若是,直接返回该头结点,说明该链表为空或者长度为1,没有反转必要; 申请两个变量: last变量:初始为No...原创 2018-12-27 18:52:49 · 158 阅读 · 0 评论 -
Python堆排序,以及堆的应用(LeetCode-295、215)
python堆排序堆排思路建立大根堆:将数组中所有数入堆,即对所有数进行一遍 heap_insert() 操作;将该大根堆堆顶元素与堆中最后一个元素交换,然后 heap_size - 1 ;对当前堆顶变化的元素,进行一次 heapify() 操作,使heap重新变为大根堆;重复2~3步骤,直至 heap_size = 1 .堆排序代码实际上主要是写清楚heap_insert()和heapify()的操作class Solution(): def heap_sort(self, n原创 2021-01-21 17:56:36 · 550 阅读 · 1 评论 -
LeetCode-315,这可能是你能找到的注释最丰富的Python解答——分治+索引数组
题目及链接315. 计算右侧小于当前元素的个数给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例:输入:nums = [5,2,6,1]输出:[2,1,1,0] 解释:5 的右侧有 2 个更小的元素 (2 和 1)2 的右侧仅有 1 个更小的元素 (1)6 的右侧有 1 个更小的元素 (1)1 的右侧有 0 个更小的元素 提示:0 <=原创 2020-12-18 21:07:56 · 612 阅读 · 1 评论 -
LeetCode-51.N皇后,Python的回溯法实现及详细讲解
51. N皇后题目:1. 思路关于N皇后问题。它也是一个回溯问题。为何?因为它也符合类似”深度优先搜索“的树形思路。例如,以4皇后为例,4*4的棋盘,假设我们从第一行开始算起,我们会发现,如果你选择第一行第一列(0, 0),那么一次为出发点,你可以去尝试接下来第二行的所有位置(1, 0) ~ (1, 3);假设你第二行选择了合适的放置位置(1, 2),那么你可以接着以[(0,0), (1,2)]为出发点考虑第三行所有位置是否放置皇后合适。显然,每个合适的皇后放置点,都是一个树形节点的开始,如原创 2020-11-14 16:17:49 · 1446 阅读 · 0 评论 -
LeetCode-5.最长回文子串——又见双指针
题目:最长回文子串思路????——还是双指针回文序列,那就是正着反着读一样。所以很容易想到双指针夹逼的方法指定指针p从字符串前端开始循环,同时指定指针q从字符串后端开始循环(往前走,一次一步),q每走完全程(遇到p)或得到了答案,则p前进一步,q再从末尾开始循环; 当p、q双指针指向的字符一致时,查看[p:q+1]的子串,正读、反读是否一致: 若一致,则和当前回文子串比长度,留更长的那个。然后break内从的q指针循环(因为q越循环子串越短,后面的没必要再查) 若不一致,那就pa原创 2020-06-10 20:40:26 · 532 阅读 · 0 评论 -
LeetCode-4.寻找两个正序数组的中位数(hard)——折半查找
题目:寻找两个正序数组的中位数思路:同类题:找到有序数组中第k小的数字——折半查找(删除)计算k值——对于双数组总长度是奇数,则k为双数组长度(len//2 + 1)(向上取整);若是偶数,则取第len//2、第len//2 + 1两个位置数字的平均数; 对已知k的数组进行折半删除:将两个数组分为数组A和数组B。分别找到A[k/2]和B[k/2]。此时,可能有2种情况: 两边数组长度都足够用:pass 若有一边数组长度不够用,则直接将数组的角标移动到该数组最末位,并记录新的值..原创 2020-06-09 14:12:19 · 526 阅读 · 0 评论 -
LeetCode-3.无重复字符的最长子串——初见双指针
题目: 无重复字符的最长子串思路????:双指针题指针q永远步进一步,指针p不动,直到p/q两个指针指向的字符一样;当q指针指向的内容,和p~q之间的内容有重复时:2.1 返回p/q之间的位差,即当前的无重复子串长度2.2 再找到和q指针当前指向的字符一样的字符在p~q中的位置,将p指针指向其下一个位置;对于q而言还是步进,和普通无异当q指针到达字符串末尾的时候循环截止codeclass Solution(object): def lengthOfLongestSubs原创 2020-06-04 11:41:27 · 375 阅读 · 0 评论 -
LeetCode-2.两数相加——链表及对其性质的理解
题目:两数相加该题目没有技巧和算法的考察,只是在挑战一些很容易出错的细节问题right-code# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def addTwoNumbers(self, l1, l2):原创 2020-06-03 11:40:15 · 251 阅读 · 0 评论 -
LeetCode-1.两数之和——灵活掌握不同数据结构的特性会显著降低时间复杂度
题目:两数之和right answerclass Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ hashmap = dict() for idx,n in enumerate(nums).原创 2020-06-01 11:35:56 · 181 阅读 · 0 评论 -
【python数据结构与算法】LeetCode215. 数组中的第K个最大元素
题目链接:LeetCode215题目在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入:[3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入:[3,2,3,1,2,4,5,5,6] 和k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ ...原创 2019-03-12 00:03:25 · 334 阅读 · 0 评论 -
【python数据结构与算法】LeetCode 48.旋转图像
题目链接:LeetCode 48题目内容:给定一个n×n的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4...原创 2019-03-02 15:25:46 · 376 阅读 · 0 评论 -
【python数据结构与算法】LeetCode33.搜索旋转排序数组
题目链接:LeetCode 33题目内容:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例, [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums...原创 2019-02-27 17:07:25 · 466 阅读 · 0 评论 -
【python数据结构与算法】平衡二叉树
判断一棵二叉树是否为平衡二叉树:LeetCode:110.平衡二叉树;剑指offer:平衡二叉树用递归函数处理二叉树是否平衡的判断问题: 原因:因为递归函数很强大。对于二叉树的递归遍历而言,每个二叉树节点都会函数访问3次,分别是“一开始”、“其左子树遍历完之后”和“其右子树遍历完之后”。因而我们可以利用这样的性质来规划我们的函数 递归过程要返回给父节点的信息:子树是否平衡、子树高...原创 2019-01-07 00:59:57 · 1335 阅读 · 2 评论 -
【python数据结构与算法】二叉树的前序、中序、后序遍历(非递归)以及二叉树的层次遍历
二叉树的遍历:非递归版:注意一下所谓“左中右”的含义,这就是前序中序后序本来面目。前序中序后序,三者是以“中”先打印还是后打印区分的前序遍历:中左右:当前节点(中)为头,弹栈顺序是先左再右 步骤 先把当前节点的left和right按照先右后左的次序压栈。遇到节点为None,则跳过。 while内:后面继续压栈的节点,是刚弹出的那个节点的左右节点。原因?“中左右”,指的是该...原创 2019-01-05 17:18:15 · 1136 阅读 · 2 评论