![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法及数据结构
文章平均质量分 50
数据结构:链表和树,图,算法
千里足行~始于足下
坚持做喜欢的事!
展开
-
Leetcode题目:python实现二叉树展开为链表(先序遍历+ 树结构)
思路:1.明确单链表的顺序是先序遍历的结果:根左右,保存到result中。2.明确最终返回的不是链表,而是二叉树,只是树的左节点为空。3.遍历result中的树节点,依次的左子树为空,右子树为下一个结点。4.此时的root就是最终的二叉树。class Node: def __init__(self,value=None,left=None, right=None): self.value = value self.left = left ..原创 2022-05-05 21:00:00 · 731 阅读 · 0 评论 -
Leetcode题目:python实现反转链表(遍历+拼接+反转操作)
思路:1.left==right,返回原链表2.left <> right,添加虚拟头结点3.保存子链表的前一个指针和后一个指针,用于拼接反转后的子链表。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution:..原创 2022-05-01 20:20:04 · 1122 阅读 · 0 评论 -
Leetcode题目:python实现分割链表(遍历+比较+拼接)
题目:分割链表思路:感觉题目的例子不是很好,最后的这组数据,很能反应题目中的要点:小于x的放到≥\geq≥x的前面。遍历链表的值,小于x的放一个链表,≥\geq≥x的放另一个链表,再拼接2个链表。class Solution: def partition(self, head: ListNode, x: int) -> ListNode: p=less=ListNode(0) q=more=ListNode(0) while h原创 2022-05-01 18:56:17 · 1141 阅读 · 0 评论 -
Leetcode题目:python实现删除排序链表中的重复元素(遍历+循环)
题目是不保留重复元素 def deleteDuplicates(self, head: ListNode) -> ListNode: dummy = ListNode(0) slow = dummy fast = head while fast != None: # 是否快进的标志 flag = False while fast.next !=None and原创 2022-05-01 15:32:18 · 1010 阅读 · 0 评论 -
Leetcode题目:python实现 旋转链表(遍历+循环)
题目: 旋转链表思路:1.首先获取链表的长度,判断旋转次数k和长度的关系,得到实际旋转次数 k=mod(k,length)k = mod(k,length)k=mod(k,length)。2.对链表执行k次往右移动一次的操作。class Solution: def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]: if head == None or head.ne原创 2022-04-27 21:12:44 · 1295 阅读 · 0 评论 -
Leetcode题目:python实现K个一组翻转链表(遍历+拼接+反转操作)
题目:K 个一组翻转链表思想:遍历链表,计数k个后,记住K个结点的首尾节点传递给反转函数,返回反转后链表的首尾结点,再拼接到原来的链表.class Solution: def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]: count = 0 result = ListNode() result.next = head原创 2022-04-26 20:07:17 · 1029 阅读 · 0 评论 -
Leetcode题目:python实现合并两(K)个有序链表(链表遍历+比较操作)
题目:合并两个有序链表思路:1.当一个为空,另一个不为空时,直接返回。2.如果两个链表不为空,比较2个头结点,不确定谁是最终的头结点,需定义一个新链表保存结果。3.当移动指针一个为空,另一个不为空时,直接将不为空的指针返回给新链表。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val#原创 2022-04-25 20:00:00 · 1352 阅读 · 0 评论 -
Leetcode题目:python实现两两交换链表中的节点(指针交换操作)
题目:两两交换链表中的节点思路(具体见下图):1.头节点会变化,所以要增加虚拟头节点p2.两两交换,1,2,3,4的顺序不能发生变化,先执行1和3 会产生环,陷入死循环。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Soluti原创 2022-04-24 20:23:43 · 589 阅读 · 0 评论 -
Leetcode题目:python实现删除链表的倒数第N个结点(双指针操作)
题目:删除链表的倒数第N个结点思路:1.若链表为空,或者k<0, 则返回原链表。2.两个指针p,q,先让指针p往前走n步,这样就保持p,q指针相差n个数。。3.此时p与q一起各往前一步一步走,当p指向空时,q指向倒数第n个结点。注意点:判断指针p的状态的临界点当p为None时,t<n,不用删除,返回原链表.当p为None时,t=n, 删除第一个结点。当p.next为空时,删除的时链表的中间结点。"===============================题目解答==原创 2022-04-24 15:51:21 · 825 阅读 · 0 评论 -
Leetcode题目:python 实现链表题目合集(边做边更新)
思路及注意点(新手走的弯路):1.一定要明确l1,l2链表是不可以在尾部加新节点的,因为最后一个指针值为None。2.保存结果的链表必须满足在尾部添加节点,因为进位的时候要加1,利用ListNode()可以完成动态添加节点。3.遍历2个链表,先走完的默认值为0,当另一个也走完的时候,一定要注意不要再加新节点了,此可结果链表的长度等于l1,l2中最长的那个。4.遍历完后,判断是否需要进位,进位则加一个新节点,并赋值为1。下面的程序是调试的所有代码。"=====================..原创 2022-04-22 08:01:14 · 791 阅读 · 0 评论 -
【算法图解】——算法必备
1. 大O表示法大O表示法:O(n)O{(n)}O(n),n代表操作数,指出了算法在最坏情况下的速度有多快,因为我们不仅要知道算法运行完的时间,还需要知道运行时间如何随着数据的增长而增加。比如:二分查找即折半查找,简单查找是一个一个的找,对于10个元素的有序列表,简单查找:O(10)O{(10)}O(10)=10,折半查找:O(log10)O{(log 10)}O(log10)=4,默认以2为底,那么从10000个找呢?两者的操作数10000,14,可见差别多大。为什么操作数代表了时间呢?因为计算原创 2020-09-15 20:32:51 · 854 阅读 · 0 评论 -
面试官问题整理(待续)
1.k-means的优缺点,其他分类方法缺点:(1)对于离群点和孤立点敏感; 离群点检测的LOF算法,通过去除离群点后再聚类,可以减少离群点和孤立点对于聚类效果的影响。(2)k值选择;(3)初始聚类中心的选择;(4)只能发现球状簇。2.怎么样检查异常点?马氏距离更适合来判断样本点与数据集的位置关系,判断其是否离群。正态概率图、箱形图、散点图都比较直观,容易判断出错,还有3detla原则(基于小概率事件不可能发生)。箱型图提供了一个识别异常值的标准,即大于或小于箱型图设定的上下界的数值即为异原创 2020-09-14 20:15:27 · 178 阅读 · 0 评论 -
数据结构四大查找——基本思想及python实现
查找表按照操作方式可分为:1.静态查找表(Static Search Table):只做查找操作的查找表。它的主要操作是:①查询某个“特定的”数据元素是否在表中②检索某个“特定的”数据元素和各种属性2.动态查找表(Dynamic Search Table):在查找中同时进行插入或删除等操作:①查找时插入数据②查找时删除数据1. 顺序查找顺序查找又称为线性查找,是一种最简单的查找方法,基本思想:从第一个元素m开始逐个与需要查找的元素x进行比较,当比较到元素值相同(即m=x)时返回元素m的下标,原创 2020-09-02 13:23:12 · 417 阅读 · 0 评论 -
数据结构八大排序——基本思想及python实现
1.八大排序算法1.1 插入排序1.11 直接插入排序思想:将数组中的所有元素依次跟前面已经排好的元素相比较, 如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 一句话:待排与前比,遇小则插入def insert_sort(L):# 遍历数组种的元素,其中0索引默认已排序,因此从1开始 for x in range(1,len(L)): #将该元素依次与已排序好的前序数组比较,如果该元素小,则交换 for i in range(x-1,-1,-原创 2020-09-01 20:04:18 · 550 阅读 · 2 评论 -
算法编程题总结——动态规划
1. 动态规划理论1.1 动态规划的思想:首先,动态规划最重要的是掌握他的思想,动态规划的核心思想是把原问题分解成子问题进行求解,也就是分治的思想。那么什么问题适合用动态规划呢?我们通过一个现实中的例子,来理解这个问题。大家可能在公司里面都有一定的组织架构,可能有高级经理、经理、总监、组长,然后才是小开发,今天我们通过这个例子,来讲讲什么问题适合使用动态规划。又到了一年一度的考核季,公司要挑选出三个最优秀的员工。一般高级经理会跟手下的经理说,你去把你们那边最优秀的3个人报给我,经理又跟总监说你把你原创 2020-08-27 20:28:13 · 2917 阅读 · 0 评论 -
【剑指Offer】全部题目 —— 通俗易懂的参考答案与解析(Python)
题目1:二维数组中的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思想: 暴力解决class Solution: # array 二维列表 def Find(self, target, array): # write code here for row in range(len(array)): arr = array[row] # 对原创 2020-05-25 10:49:29 · 6053 阅读 · 3 评论