- 博客(19)
- 收藏
- 关注
原创 数据结构与算法——排序(下)
类似二分法查找,因为每个数最终排序后再数组中的位置是不变的,所以每次找数对应的位置使“在这之前小于它,在这之后大于它”,也是相对规律。缩短的排序的范围,每个数找到所在范围里的位置后,再分割,直到所有数排完为止。希尔排序也是同理,按倍数分成多个插排,而倍数位1时就是整体的插入排序,这个过程中每个倍数的插排都是在相对有序的数组上进行的,所以会更快,节省时间。例如,当增量为1时,希尔排序退化成了直接插入排序,此时的时间复杂度为O(N²),而Hibbard增量的希尔排序的时间复杂度为O(N3/2)。
2024-05-15 20:15:41
331
原创 数据结构与算法——排序四大经典算法(基础)5.13
插排排列时如果规律的话非常快,不像冒泡必须全走一遍,所以希尔排序作为插入排序的进化版,优化了这一部分。不好语言形容,总结就是分块进行有序排列,让每次排列时更规律,更规律了那时间就会短的。内循环,从尾到头遍历,遇到比a[i]小的停止,大的替换,最终使[1,i]有序。第一个循环i就是尾巴,第二个循环,从头到i遍历一遍将最大的冒到尾巴(冒泡)通过遍历[1,i],将a[i]插入到有序的位置,那么有序区间就从i-1到i。时间复杂度:
2024-05-13 18:28:14
192
原创 数据结构与算法——高精度算法(加减乘除)5.12 新
所以输入用string,计算时分位计算(有点模拟的味道,也有些技巧性,锻炼对数字的感觉和编码能力)再进行减法,减不了就拼接到下一位继续减,保留减的次数(结果),下一位重新计。变成[79879846][8][4][6][5][4][6][8]是解决数太大计算时会爆掉类型的问题。如798798468465468。4.高精度除法(高精除高精)
2024-05-12 21:25:01
134
1
原创 数据结构与算法5.9 高精度算法
因为高精度算法是解决数太大计算时会爆掉类型的问题所以输入用string,计算时分位计算(有点模拟的味道,也有些技巧性,锻炼对数字的感觉和编码能力)
2024-05-10 20:35:03
209
原创 关于指针和&的本质0426
const修饰指针 常量指针const int *p=&a;指针指向的值不可以改,指针可以改const修饰常量 指针常量int* const p=&a;指针不可以改,指针指向的值可以改。const既修饰指针又修饰常量就是常量指针int &a=b;等于int * const a= &b;int a=10;内部发现是引用的,则会自动转化为*a=10
2024-04-27 14:29:28
103
原创 C++内存0426
四区存在的意义:不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活的编程。C++程序在执行时,将内存大方向划分为4个区域。
2024-04-26 21:00:38
128
1
原创 C++收获 4.25
1.内存,动态扩容的,如链表之类的,必须由malloc开辟空间来存储,因为如果在方法里面直接设一个变量再添加,虽然也开辟了空间,但是会随着对应函数结束而出栈,对应的空间就没了,所以要用malloc再堆中开辟空间;4.链表靠关系连接,如果要插入就把箭头指向改变就好,每个结点(值,下个结点地址)2.C++最关键的两点,指针和内存开辟(堆,栈)3.顺序表按顺序连续。
2024-04-25 19:02:18
86
2
原创 方法篇4.16
for(String value: map.keySet()){//根据后面的变量返回前面的变量。插入,原来的元素往后。6.addall();5.获取map中的元素值。4.Deque双向队列。add自动锁定last。
2024-04-16 14:55:36
98
原创 训练收获03.11
因为一个一个往前对比,如果有一个数比前面的数大,那么比它小的数就永远不可能用的到。2.一个字符串的子串是由不同的字符构成的,我们一个一个字符求这个字符的所有可能的子串,并且并且通过“相同字符以左边为大头”的做法,排除了重复的可能性,那么所有次数相加之和就是每个子串含有不同字符相加之和。先将求和的方法写出,按照顺序,根据求和的大小将数字依次放入数组(由于是位数和和大小两个指标,所以想到了用二维数组)(巧妙的用数组储存每个数位和当前的数量,作为指标可以直接将数字饭放入对应的位置),最后再依次输出。
2024-03-21 18:48:58
219
1
原创 案例训练1.24:大整数乘法模拟和加法字符串模拟
这两道题现在看上去思路简单,但是我们如果学过进制这道题的想法会偏向用余数来存进数组,这个方法相比于直接用字符计算更加考验思维(总是出现索引越界或者是循环少了一个,又找不到问题,只能放弃等下次再试),所以上面用字符的方法更加直接,包括最后有几行链式编程能让代码看上去更简洁。
2024-01-24 20:52:30
352
1
原创 案例训练1.23:进制运算、位数运算
今天对进制有了新的理解,拿最常见的十进制,我们求每一个位时都用n%10,n/10反复循环直到n==0,对于其他进制也一样,都拿对应的数进行这样的操作(数是一定的,进制不同呈现的样子也不同)。
2024-01-23 20:57:40
372
原创 案例训练1.22:迷宫问题、唯一分解定理、最大公约数
这道题第一步,把迷宫创建出来。创建一个char二维数组,通过BufferedReader的readLine()和to.CharArray()配合循环将题目里的迷宫放入数组。第二步,阅读题目可知,限制点移动的条件有:下个点是否走过,是不是0,在不在迷宫内。我们相应的创造方法来解决这些问题,1.创造boolean类型的二维数组help白表示对应的位置是否走过,boolean类型数组默认是false所以当走过时help元素变成true。
2024-01-23 13:56:38
1492
1
原创 案例训练1.21
案例:n为2021041820210418,求三个整数相乘等于n有多少种方法(原题是长宽高,所以不考虑重复:如1.2.3和2.1.3)这道题可以暴力算法,但是运行要运行很久,所以这道题的目的是运用算法提高效率因为是三个因数比较懊恼,一般想法是分成两个因数然后再从其中一个因数里分,没有实践过这种想法因为想起来太懊恼且代码复杂。这里可以用一个大家其实都知道但是不太常用的方法,就是某数因数的因数也是这个数的因数。
2024-01-21 21:16:56
1351
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人