算法
文章平均质量分 57
小小小小人水豚
日拱一卒,不期而遇
展开
-
【算法】python使用4种方式实现2个数交换
题目定义两个整数a=1,b=3,交换两个数据,实现a=3,b=1方式一:借助第3个变量这种方式比较通用,换了任何一种语言都适用>>> a, b = 1, 3>>> c = a>>> a = b>>> b = c>>> a3>>> b1方式二:python特有的>>> a, b = 1, 3>>> a, b = b, a>>原创 2021-08-22 11:00:45 · 2453 阅读 · 0 评论 -
【算法题】求一个字符串的最长不重复子串
【题目描述】求一个字符串的最长不重复子串。比如:给定"abcabcbb"的答案是"abc",长度是3;给定"bbbbb"的答案是"b",长度为1。【方式一】粗暴的方法,找出字符串中所有长度的子串,逐一遍历并找出其中没有重复字符的字符串,并对比找到长度最大的。def get_max_sub_str(s): """求一个字符串的最长不重复子串 """ temp = [] for i in range(len(s) - 1): for j in range(原创 2021-07-09 10:30:40 · 2027 阅读 · 0 评论 -
【算法题】原地删除有序数组中的重复数据
题目描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。注意:不要使用额外的数组空间,必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。思路借助新列表,或者使用set()函数的思路就不用考虑了,因为空间复杂度显然是不满足的。考虑for循环+快慢指针,慢指针记录不重复元素的下标,快指针用来变量列表所有的元素,当2个指针位置的元素不相等,那么慢指针+1,将快慢指针位置的元素交换,否则的话只有快指针+1,遍历完成后慢指针就是不重复数组的长度。原创 2021-06-30 09:43:57 · 381 阅读 · 0 评论 -
【算法题】归并排序(java版和python版)
今天记录一下归并排序,并且同时用java和python实现。归并排序分为二路归并和多路归并1.归并排序原理归并排序使用了二分法,归根到底的思想还是分而治之。拿到一个长数组,将其不停的分为左边和右边两份,然后以此递归分下去。然后再将它们按照两个有序数组合并起来。给出一张图:总体来说分为两个步骤:递归拆分:上图显示了归并排序的第一步,将数组按照中间位置middle进行递归拆分,最后分到最细(也就是只有1个元素),再使用对两个有序数组进行排序的方法对其进行排序; 合并有序数组:两个有序.原创 2020-06-02 22:14:11 · 322 阅读 · 0 评论 -
【算法题】堆排序(python版)
今天记录一下堆排序,它并不是真正的二叉树结构,而是用树的概念来实现链表的排序。前两部分关于树和对的概念参考链接:https://www.cnblogs.com/0zcl/p/6737944.html一、树的概念1.度:指的是一个节点拥有子节点的个数。如二叉树的节点的最大度为2。2.深度:数的层数,根节点为第一层,依次类推。3.叶子节点:度为0的节点,即没有子节点的节点。4.满二叉树:除了叶子结点外每一个结点都有左右叶子节点,且叶结点都处在最底层的二叉树5.完全二叉树:只有最下面的两层结点原创 2020-05-29 21:59:45 · 579 阅读 · 0 评论 -
最通俗易懂的时间复杂度
前言之前写代码的时候只关注功能是否实现了,有时候即使一个功能用很多种算法实现了也从来没有关注过哪种算法相比来说是更好的,或者说各有什么优缺点,其实评价一个算法好坏可以从时间复杂度和空间复杂度两个方面来衡量。现在很多面试的编程题里面都会要求你实现的时间复杂度不能超过O(n)等等,那么时间复杂度到底是个什么鬼?时间复杂度的概念我们知道程序=数据结构 + 算法,算法就是解决问题的步骤,一个...原创 2019-04-02 10:43:11 · 1722 阅读 · 0 评论 -
python实现简单的链表
链表是一个常用的数据结构,就是像链条一样,由一个节点接着一个节点连接下去。注意:链表在物理存储上是非连续的,所有一般不会基于位置遍历链表。链表可以方便的插入元素,但是查找是很耗时。用python实现的单向链表如下:#encoding=utf-8"""链表"""class Node(object): """节点类""" def __init__(self,valu...原创 2019-05-09 23:34:53 · 861 阅读 · 0 评论 -
二叉树的广度优先遍历
二叉树的特点就是每一个节点都有一个左节点,一个右节点,左右节点可以都为None。二叉树的广度优先遍历就是借助队列的先进先去,先把将根节点放入队列中,之后开始循环遍历,从队列中取出一个节点,只要该节点的左节点不为空就将其放入队列,同理右节点也是如此,如此往复,直到队列为空就结束。"""二叉树的广度优先遍历"""#本质就是队列,先进先出from queue import Queuecla...原创 2019-05-31 05:55:09 · 2779 阅读 · 0 评论