
数据结构
杨二K
一直在努力变成更好的自己,从没放弃!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
给定一个字符串,按照写Z的方式写成Z,然后按行读
解体思路:首先获取多行,行数由Z的实际高度来确定;然后从上至下遍历,到达行底反向遍历。是看别人的实现,希望有一天我能够这么娴熟。public static String convert(String s ,int numRows){ if (numRows == 1){ return s; } ArrayList<StringBuilder> rows = new ArrayList<>(); .原创 2021-12-21 14:03:34 · 186 阅读 · 0 评论 -
数据结构---希尔排序
希尔排序。终于在此刻将这个排序学完了。。这个排序讲什么的呢?就是说,它对一个序列,取了一个gap的步长。然后呢,用gap将这个序列分成了很多组,然后就是每组进行插入排序(插入排序:将一个序列从前往后走,每走一步,就将这个元素和它前面的所有元素比较交换位置。)。下面上代码:def shell_sort(alist): n = len(alist) # 找...原创 2019-04-08 16:59:34 · 209 阅读 · 0 评论 -
数据结构---二叉树
二叉树的基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)二叉树的性质(特性)性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)性质2: 深度为k的二叉树至多有2^k - 1个结点(k>0)性质3: 对于任意一棵二叉树,如果其叶结点数为N0,...转载 2019-04-08 21:34:02 · 266 阅读 · 0 评论 -
数据结构---二叉树的遍历
树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次,我们把这种对所有节点的访问称为遍历(traversal)。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归,广度优先一般用队列。一般情况下能用递归实现的算法大部分也能用堆栈来实现。深度优先遍历对于一颗二叉树,深度优先搜索(Depth First Search...转载 2019-04-08 21:37:31 · 188 阅读 · 0 评论 -
数据结构---树
树的概念树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,...转载 2019-04-08 21:44:09 · 154 阅读 · 0 评论 -
数据结构------顺序表
顺序表:按照顺序存储相同数据类型的数据。 比如列表顺序表的操作: 增加元素—表尾部加入元素-----保序的元素插入(元素之间的相对位置不变)------非保序的元素插入(直接交换两个元素的位置,打乱了原有顺序,很少有人用)删除元素—删除表尾元素-----非保序的元素删除-----保序的元素删除python的list、tuple采用顺序表来实现。特征:基于下标的高效元素访问和更新,...原创 2019-04-03 10:18:48 · 344 阅读 · 0 评论 -
数据结构---顺序表的结构与实现
顺序表的结构最上面是表头信息,下面是有关表的整体情况的信息;一个顺序表的完整信息包括两部分,一部分是表中的元素集合,另一部分是为实现正确操作而需记录的信息,即有关表的整体情况的信息,这部分信息主要包括元素存储区的容量和当前表中已有的元素个数两项。顺序表的两种实现方式左边为一体式结构,,,,右边为分离式结构。。。一般分离式结构用的比较多。因为更加方便,每次需要做顺序表扩展的时候,原有表表...原创 2019-04-03 10:43:56 · 354 阅读 · 0 评论 -
数据结构---双向链表
在两个节点之间插入新的节点原创 2019-04-03 14:51:57 · 175 阅读 · 0 评论 -
数据结构---尾部插入法
点链表的尾部插入法:原创 2019-04-03 15:20:19 · 2090 阅读 · 0 评论 -
数据结构---双链表节点删除
数据节点的删除:原创 2019-04-03 15:31:51 · 589 阅读 · 0 评论 -
链表反转问题
给你一个链表,请你帮我把它反转:话不多说,直接写代码吧def ListNode(self,x): self.val = x self.next = Nonedef ReverseList(self, pHead): cur = pHead tmp = None newHead = None if pHead == None or cur.next == None: ret...原创 2019-04-16 20:12:13 · 202 阅读 · 0 评论 -
排序算法总结
前几天刚学完排序算法,趁热对所学排序算法进行一个总结:1. 插入排序:就是将需要排序的元素分成两部分,每次从右边部分取出一个元素往前面部分去比较排序。最优时间复杂度:O(n)最坏时间复杂度:O(n2)稳定性:稳定代码实现:def insert_sort(alist): n = len(alist) #首先计算序列的长度 for i in range(1,n): #遍历整个序...原创 2019-04-14 21:10:38 · 135 阅读 · 0 评论 -
数据结构---选择排序
选择排序红色表示当前最小值,黄色表示已排序序列,蓝色表示当前位置。选择排序就是按照从左往右,或者从右向左,依次选出一个最大的或者最小的。例如:从左往右,依次选出最小的,放到最前面,依次选依次放,直到结尾。# coding:utf-8def select_sort(alist): """选择排序""" n = len(alist) for j in rang...原创 2019-04-08 11:08:42 · 295 阅读 · 0 评论 -
数据结构---冒泡排序
从头到尾,相邻两个不停的比较,不停的往后移动叫冒泡,每走一步,小的往前冒。代码实现:# coding:utf-8def bubble_sort(alist): """冒泡排序""" n = len(alist) for i in range(0, n - 1): for j in range(0, n - i - 1): ...原创 2019-04-08 10:40:28 · 190 阅读 · 0 评论 -
python实现:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5------------------------------------删除重复结点,只需要如下操作#一开始我们就要定义一个节点。class ListNode: def ...原创 2019-04-05 11:44:16 · 532 阅读 · 0 评论 -
python---请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a
今天又看到一个题,是关于字符串的题目,我为何解不出来呢:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。这个题我应该怎么做呢。如果是我来做,我只知道正整数和负整数可以用int转化为int类型的,可是...原创 2019-04-05 15:39:56 · 1567 阅读 · 0 评论 -
python---输入两个链表,找出它们的第一个公共结点。
又遇到一个链表题:::输入两个链表,找出它们的第一个公共结点。-------------------------------------------------我就在想,为什么同样是接受的九年义务教育,为何他们就如此优秀。遇到这个题,我的第一个想法是,创建两个游标,拿到第一个链表1的第一个节点,然后依次去比对链表2,如果能比对上就return。于是我的代码如下:# class List...原创 2019-04-05 16:24:07 · 812 阅读 · 1 评论 -
python---实现统计一个数字在排序数组中出现的次数。
统计一个数字在排序数组中出现的次数。------------------------------------------------此题如此简单,一个for循环就能搞定。。O(n)# -*- coding:utf-8 -*-class Solution: def GetNumberOfK(self, data, k): # write code here ...原创 2019-04-05 16:27:29 · 1836 阅读 · 1 评论 -
python---在一个字符串(字符串长度在0到10000之间,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)
此题又毫无悬念的让我大吃一惊;--------------------------------------------------------在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).这个题,我看到的第一眼就确定他很简单,然后用暴力破解的方法来解决,,可是我错了。。。。创...原创 2019-04-05 18:34:54 · 2252 阅读 · 1 评论 -
python---一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
这个题采用了哈希表的思想:----------------------------------------------------------------------一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。直接将里面的每个数字映射到字典里,然后作为索引,出现次数作为值,最后取出值为一的索引值。代码如下:# -*- coding:utf-...原创 2019-04-05 19:18:19 · 2223 阅读 · 1 评论 -
数据结构---插入排序
下面这个图说明了插入算法的精髓,都是后面的序列对前面的序列进行操作引用别人的描述:插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。...原创 2019-04-06 09:44:53 · 440 阅读 · 0 评论 -
数据结构---二分查找
搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找------------------------------------------------------------------二分查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为...原创 2019-04-06 10:44:39 · 321 阅读 · 0 评论 -
数据结构---归并排序
归并排序归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。-----------------------------------------------------...原创 2019-04-06 16:23:07 · 200 阅读 · 0 评论 -
数据结构---快速排序
对于一个序列,准备两个游标,分别从左右两端往中间夹击,左边游标记为low,右边游标记为high,凡是左边遇到的元素都要比指定的数字小,右边的比指定的数字大,如果不满足条件就停下, 两个都停下了就交换元素位置。我写的文字是不是只有我自己能懂,不够精炼。-----------------------------------------------------------------------两...原创 2019-04-06 21:02:43 · 178 阅读 · 0 评论 -
数据结构---栈与队列
顺序表和链表统称为线性表,可以实现栈我们用list容器来实现栈。list其实也是一种顺序表。stack stack stack!!!栈的操作Stack() 创建一个新的空栈push(item) 添加一个新的元素item到栈顶pop() 弹出栈顶元素peek() 返回栈顶元素is_empty() 判断栈是否为空size() 返回栈的元素个数代码实现:# coding:utf-8...原创 2019-04-06 21:42:56 · 156 阅读 · 0 评论 -
360实习---给定一个1到N的排列A1到AN,每次可以将排列的第一个数移动到排列的末尾,假设经过若干次移动后得到排列B1到BN,那么|B1-1|+|B2-2|+...+|BN-N|的最小值是多少
话不多说,直接上图:经过两次移动过后得到排列{1 5 2 4 3},此时|B1-1|+|B2-2|+|B3-3|+|B4-4|+|B5-5|取得最小值。此题我才用了暴力破解的方法,每次将第一个元素移动到末尾,然后计算值付给一个列表,最后求列表的最小值。代码如下:class Qh(object):def sum1(self, a, b):sums = 0for i in range(...原创 2019-04-04 10:13:22 · 4133 阅读 · 0 评论