
算法
小萌子W
这个作者很懒,什么都没留下…
展开
-
双指针算法何时加减令人头秃怎么办
用双指针去做循环的时候,什么时候该把指针加一,何时该减一,实在是令人头秃。今天分享一个简单的小技巧——枚举法。举个例子:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]思路:用两个指针i,j,i用来查找0,j用来查找非0,然后交换两个元素,大功告成。慢着慢着,你以为这就完事了么,nonono~~~上面交换步骤很简单,可是往往细节才是魔鬼,也容易被忽略,就是不进行交换的时候,原创 2021-04-06 11:57:18 · 189 阅读 · 0 评论 -
垃圾回收算法
垃圾回收算法GC标记-清除算法由标记阶段和清除阶段构成。标记阶段是把所有活动对象都做上标记的阶段。清除阶段是把那些没有标记的对象,也就是非活动对象回收的阶段在搜索对象并进行标记时使用的是深度优先搜索,因为深度优先搜索的内存使用量比广度优先搜索少优点实现简单与保守式GC算法兼容缺点碎片化分配速度慢,需要遍历空闲链表与写时复制技术不相容引用计数法用计数器表示对象被多少程序引用,当计数器的值为0时,对象变成了“垃圾”,这个对象的指针会全部被删除优点可即刻回收垃圾原创 2021-02-20 11:28:22 · 93 阅读 · 0 评论 -
php实现十大排序算法之希尔排序(Shell Sort)
将数组中数据依次按照增量序列{n/2,(n/2)/2…1}分组将每次按照增量分组的数组插入排序重复直到增量为1<?phpfunction shellSort($arr) { $len = count($arr); for ($gap = floor($len/2);$gap > 0; $gap = floor($gap / 2)) { for...原创 2020-01-19 10:46:48 · 210 阅读 · 0 评论 -
十大排序算法之插入排序(Insertion Sort)
将数组中数据分两个区间,已排序区和未排序区取未排序去中的元素在已排序区间中找到合适的插入位置将其插入重复直到未排序区间中的元素为空,算法结束<?phpfunction insertionSort($arr){ $num = count($arr); if($num<=1){ return $num; } for($i=1;$i...原创 2020-01-18 16:40:55 · 131 阅读 · 0 评论 -
十大排序算法之选择排序(Selection Sort)
从未排序区间中找到最小元素,放入已排序区间末尾function selectionSort($arr){ $newArr = []; $len = count($arr); for($j = 0;$j < $len;$j++){ $smallest_index = findSmallest($arr); //取出最小的元素值并从数组中...原创 2020-01-17 11:38:41 · 142 阅读 · 0 评论 -
十大排序算法之归并排序(Merge Sort)
把长度为n的输入序列分成两个长度为n/2的子序列对这两个子序列分别采用归并排序将两个排序好的子序列合并成一个最终的排序序列php代码实现:function mergeSort($arr) { $len = count($arr); if($len < 2){ return $arr; } $middle = $len>>...原创 2020-01-16 10:09:16 · 873 阅读 · 0 评论