自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 数据结构和算法(刷题)- 两个大整数相加

优化:如果数字有50多位呢,都要拆分到数组吗,其实可以不用。int最多可以有十位数,我们可以拆分为9位9位的,再加。再Java中BigInteger和BigDecimal底层也是这样的,思路差不多。方法:可以用数组来存储存储两个数,然后一个结果数组来存储相加后的结果。位数要比较大整数的位数多1,因为可能进位。倒序存放,依次相加,把进位的数存在结果数组中。问题:两个特别大的整数相加,long类型都无法存储。

2024-07-22 09:36:36 317

原创 数据结构和算法(刷题)- 删除k个数字后的最小值

方法:原来整数的所有数字,从左到右开始比较,如果一位数字大于它后面的数字,那么删除该数字后,必然会使数变小。思考:很好的利用了栈来回溯遍历过的数组和删除数字,并且支队所有数字进行了一次遍历,因此时间复杂度是。问题:给出一个整数,从该数中去掉k个数字,要求剩下的新整数尽可能小。思考:去掉的整数应该尽可能大一些,并且位次要高一些的。解释:这种依次求得局部最优解,最终得到全局最优解的思想,叫贪心算法。

2024-07-21 09:43:34 428

原创 数据结构和算法(刷题)- 寻找全排列后的下一个数

问题:给出一个正整数,找出这个正整数所有数字全排列的下一个数。也就是这个数的数字全排列,找到一个比原数大的而且只比原数大的数。例子:输入:12345 输出:12354。思考:三个步骤,每一步都是。

2024-07-20 10:11:24 436

原创 数据结构和算法(刷题)- 用栈实现队列

出队涉及AB两栈的迁移。这是均摊时间复杂度,均摊到每次出队上就是。只用1个栈肯定不行,得用两个栈。思考:入队的时间复杂度显然是。思路:一个栈A,一个栈B。

2024-07-19 09:31:46 365

原创 数据结构和算法(刷题) - 无序数组排序后的最大相邻差

简介:根据原数组长度n,创建n个桶,每个桶代表一个区间范围,区间跨度是(max - min) / (n-1)。遍历原数组,对应元素放到桶中,记录每个桶的最大最小值。遍历桶,统计每个桶的最大值和右侧非空桶的最小值的差,数值最大的差即为最大相邻差。问题:一个无序的整型数组,求出该数组排序后的任意两个相邻元素的最大差值?要求时间和空间复杂度尽可能低。,在不改变原数组的情况下,空间复杂度为。时间复杂度和空间复杂度都是。

2024-07-18 10:28:38 296

原创 数据结构和算法(刷题)- 判断一个数是否为2的整数次幂

简介:用一个整型变量,不断乘以2,判断每次的结果和目标整数是否相等,若大于了目标数,则不是2的整数次幂。,只有第一个数字是1,后面都是0。而2的整数次幂减一后就是。简介: 乘以2运算换成左移位,提高性能。思考:这是最优的方法,时间复杂度为。简介:2的整数次幂转换为2进制是。根据2的整数次幂的性质。思考:时间复杂度还是。

2024-07-17 10:49:56 560

原创 数据结构和算法(刷题) - 求出两个数的最大公约数

简介:两个正整数a和b(a > b),他们的最大公约数等于a除以b的余数c和b之间的最大公约数。最后直到两个数可以整除,就找到了最大公约数了,或者其中一个数减少到1了。简介:两个正整数a和b(a > b),他们的最大公约数等于a-b的差值c和较小数b之间的最大公约数。简介:从较小的整数的一半开始,变小,试图找到一个合适的整数i,看看这个整数是否能被a和b同时整除。思考:避免了大规模取模运算,但是运算次数增大了,最坏时间复杂度为。当a和b都是奇数,更相减损术。当a为偶数,b为奇数,当a为奇数,b为偶数,

2024-07-16 11:49:53 300

原创 数据结构和算法(刷题)- 最小栈的实现

思考:如果仅仅只用一个变量来存储最小值,那当这个最小值元素出栈的时候,以前的最小值就找不到了。我们可以专门用一个栈来存储最小的。问题:实现一个栈,有出栈、入栈、取出最小元素3个方法。三个方法的时间复杂度要求都为。

2024-07-16 10:48:07 104

原创 数据结构和算法(刷题)-如何判断链表有环

法1:从头节点开始,依次遍历链表中的每一个节点。每遍历一个新节点,就重新检查新节点之前的所有节点,用新节点和之前的所有节点比较。法2:创建一个HashSet,key为节点id,来存储遍历过的节点。然后依次遍历每一个节点,每遍历一个新节点,都再HashSet中比较,有则有环,无则继续。法3:双指针,都指向头节点,但一个节点快(一次移动两个),一个节点慢(一次移动一个),如果有环,则两个节点必然相遇。

2024-07-16 10:20:42 352

原创 数据结构和算法(排序)- 总结

On2)On2)O1)On2)On2)O1)Onlogn)On2)Ologn)Onlogn)Onlogn)O1)Onm)Onm)Om)On)Onlogn)On。

2024-07-12 09:39:37 210

原创 数据结构和算法(排序) - 桶排序

这里创建的桶的数量等于原始数列的数量,除最后一个桶只包含数列最大值外,前面的桶的区间按照比例来确定:区间跨度=(最大值 - 最小值)/(桶的数量 -1)类似于计数排序所创建的统计数组,桶排序需要创建若干个桶来协助排序。遍历原始数列,把元素对号入座放入各个桶中。没有绝对不好的算法,关键要看具体的场景。创建桶,并确定每一个桶的区间范围。对每个桶的元素分别进行排序。遍历所有的桶,输出所有元素。思考:每一步时间复杂度都是。,在不均匀时可能编程。

2024-07-12 09:37:11 721

原创 数据结构和算法(排序)- 计数排序

问题:以数列的最大值来确定统计数组的长度,其实并不好。如果数列是91,96,92,91,98,94,99 这样的,那就要创建一个容量100的数组了,但是前面的空间都被浪费掉了。方案:不再以输入数列的最大值+1作为统计数组的长度,而是以数列最大值-最小值+1作为长度。思考:124步都是原始数组遍历,复杂度n,第三步遍历统计数组,运算m,总体是3n+m。已经排好序了,遍历数组输出数组元素的下标值,元素的值是几,就输出几次。适用情况:一定范围内的整数排序,在取值范围不很大的情况下,性能快过。

2024-07-11 11:00:08 388

原创 数据结构和算法(排序) - 堆排序

思考:下沉调整的时间复杂度是O(logn),总体时间复杂度O(nlogn)

2024-07-10 09:58:16 487

原创 数据结构和算法(排序)- 快速排序

类比:和冒泡一样通过元素之间的比较和交换位置来排序,也属于交换排序。核心(分治法):每一轮中挑选一个基准元素,并让其他比它大的元素移动到数列一边,比他小的元素移动到另一边。分成两个部分,然后在两个部分中继续重复上面的操作。每轮遍历元素n,logn轮,故时间复杂度为O(nlogn)两个核心问题:基准元素的选择,元素的交换。

2024-07-10 09:56:59 610

原创 数据结构和算法(排序)- 冒泡排序和冒泡优化

比喻:就像汽水里的气泡网上冒,冒泡排序是最大(或最小)的元素依次往一边冒。代码:(最原始冒泡排序)

2024-07-04 11:42:38 364

原创 数据结构和算法(排序) - 简介

排序在生活中是随处可见的,考试成绩排序,食堂打饭要排序在一些网站上,购物网站有商品的排序,游戏有评分排序分类时间复杂度On2O(n^2)On2:冒泡,选择,插入,希尔时间复杂度OnlognO(nlogn)Onlogn:快速,归并,堆时间复杂度OnO(n)On:计数排序,堆排序稳定排序:相同的元素排序之后保持着排序前的顺序不稳定排序:相同的元素排序之后打乱了着排序前的顺序。

2024-07-04 11:41:15 392

原创 数据结构和算法(树)- 优先队列

【代码】数据结构和算法(六)- 优先队列。

2024-06-29 11:27:02 162

原创 算法和数据结构(树)- 二叉堆

三种操作都基于堆的自我调整。插入到二叉堆的最后一个位置,然后慢慢上浮到合适的位置(比父节点小,就上浮)二叉堆用的是数组存储,如何定位左右孩子节点呢。所有非叶子节点下沉(比左右孩子最小的大,下沉)二叉堆是实现堆排序和优先队列的基础,后面详解。

2024-06-28 11:28:17 774

原创 算法和数据结构(树)- 二叉树的遍历

大多数能用递归解决的问题,可以用栈来解决。因为他们都有回溯的特性。直接上代码,代码里面解释。代码:要用到递归,复习写递归三大步骤:(下面的代码理解递归很重要)按照从根节点到叶子节点的层次关系,一层一层横向的遍历节点。同一层的节点之间是没有直接关联的,需要借助队列来实现。前序遍历:根节点,左子树,右子树。中序遍历:左子树,根节点,右子树。后序遍历:左子树,右子树,根节点。总结:前中后代表根节点的输出顺序。

2024-06-27 10:22:34 525

原创 算法和数据结构(树)- 树和二叉树简介

定义:树的每个节点最多有2个孩子节点。可能1个孩子,可能没有。左孩子,右孩子,顺序固定两种特殊形式:满二叉树和完全二叉树满二叉树:一个二叉树的所有非叶子节点都有左右孩子,并且所有叶子几点都在一个层级。就是每个分支都是满的完全二叉树:对一个有n个节点的二叉树,按层级顺序编号,从1到n。如果这个树所有节点和同深度的满二叉树的编号从1到n节点位置相同。则这棵树为完全而二叉树。总结:满二叉树要求更严:满二叉树所有分支都满着,且叶子节点都在一层。完全二叉树只要保证最后一个节点之前的节点都齐全即可。

2024-06-25 15:01:48 569

原创 算法和数据结构(数据结构) - 数据结构基础

定义:是有限个相同类型的变量所组成的有序集合特点:内存中顺序存储基本操作读取元素:根据下标读取,0开始,小心越界更新元素:直接替换为一个新值插入元素:前提:数组的实际元素数量小于数组长度尾部位置:直接中间位置:部分元素得向后移,让出那个位置,再给那个位置赋值超范围插入:要扩容删除元素:后面的元素向前挪动一位上述操作较简单,代码就不写了数组的优势和劣势。

2024-06-23 10:51:34 903 1

原创 算法和数据结构(概述) - 概述

数据结构(data structure):数据的组织、管理和存储格式。其目的是为了高效地访问和修改数据。数据结构是算法的基石。很重要,一定要掌握好。数据结构有哪些组织方式呢?线性结构:数组,链表,栈,队列,哈希表树:二叉树,二叉堆图其他:从基本数据结构而来,用于解决特定的问题,如跳表,位图等。

2024-06-23 10:47:13 637

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除