![](https://img-blog.csdnimg.cn/20210621200231481.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
高效算法
收集一些高效,别出心裁的算法
妄痴梦中
对于学习路上的一些知识进行总结,希望能帮助到各位朋友
展开
-
java对时间序列根据阈值进行连续性分片
连续性时间序列进行分片,原创 2023-08-29 16:04:48 · 1632 阅读 · 0 评论 -
双指针二分法(范围映射/匹配问题)
二分法(双指针),范围映射/匹配问题原创 2023-02-16 17:50:54 · 108 阅读 · 1 评论 -
对list分组的前世今生
问题:根据student类的属性颜色对list进行分组!computeIfAbsentCollectors.groupingBy原创 2022-05-15 10:02:02 · 159 阅读 · 0 评论 -
堆排序详解
堆排序>思路:(由于二叉树比较起来困难,所以就将二叉树放入数组中进行比较) 如: 5 / \ 写成 6 3 ===》arr={5,6,3,4,2,9,8} / \ / \ 4原创 2021-08-14 14:52:03 · 115 阅读 · 0 评论 -
插值查找算法详解及优化
插值查找插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。自适应选择点: int mid=left+(findVal-arr[left])*(right-left)/(arr[right]-arr[left]);>>思路:定义很明显就是基于二分查找,所以直接搬问题就在于这个自适应选择自适应选择点: ` int mid=left+(findVal-arr[left])原创 2021-07-08 21:06:05 · 491 阅读 · 1 评论 -
查找算法之线性查找详解与优化
线性查找这里的线性查找,给定的数组无需有序>>思路:1.就是利用for循环遍历,直到找到为止>>优化:给定一个标识,判断是否找到代码: public static void linearSearch(int[] arr,int findVal){ for (int i = 0; i < arr.length; i++) { if (arr[i]==findVal){ System.ou原创 2021-07-06 19:57:33 · 103 阅读 · 2 评论 -
八大排序算法全讲解
排序算法算法名(可跳转)平均时间复杂度最好情况最坏情况空间复杂度排序方法稳定性冒泡排序O(n2)O(n)O(n2)O(1)内模式稳定选择排序O(n2)O(n2)O(n2)O(1)内模式不稳定插入排序O(n2)O(n)O(n2)O(1)内模式稳定希尔排序O(n log n)O(n log2 n)O(n2)O(1)内模式不稳定归并排序O(n log n)O(n log n)O(n log n)O(n)原创 2021-07-06 11:04:14 · 154 阅读 · 4 评论 -
基数排序详解及演示
基数排序基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。>>思路:1. 用一个二维数组类似的表示10个桶,每个桶是一个一维数组;分别代表该位是0,1,2原创 2021-07-06 09:43:40 · 176 阅读 · 0 评论 -
归并排序详解
归并排序归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。>>思路:归并排序总体分为两大部分:分:将需要排序的数组分成若干子列(采取递归方式)如: [8,9,6,3]原创 2021-07-05 14:56:55 · 92 阅读 · 2 评论 -
快速排序详解(一文解决)
快速排序>>思路:1. 随便取数组中一个数作为比较数记录下来,(作者采用了第一个数)2. 在数组的左端,右端位置各插入一个指针,(该指针用于于比较数比较)3. 通过一个while循环,右指针减减,找出第一个比比较数小的数,4. 因为前面的比较数已经记录下来,所以比较数原来的位置可覆盖,则将右指针得到的数赋值于比较数原来的位置5. 再通过一个while循环,左指针加加,找出第一个比比较数大的数,6. 因为前面右指针找到的数,已经记录下来,所以它原来的位置可覆盖,则将左指针得到的数赋值原创 2021-07-05 09:58:45 · 90 阅读 · 2 评论 -
希尔排序详解及优化
希尔排序>>思路:通过数组长度不断除2得到每次的步长,每次得到的数组,其中在每个步长中的对应位置的数, 组合起来是有顺序的,如此反复,当步长为1时,便得到该有序数组步长为数组.length/2时:1. 先将数组.length/2作为步长,将它们每组的第0项,第1项,第2项...进行比较,大的放在后一半的第0项, 小的放在前一半的第0项原创 2021-07-03 19:54:58 · 289 阅读 · 3 评论 -
简单数组对数器的实现
对数器的实现 >>思路: 1. 写一个方法,传入想要实现数组的,大小和范围,并返回一个数组 2. 根据大小定义定长的数组 3. for循环遍历数组,为数组的每一项赋值(用Random类中的nextInt方法传入范围) 4. 返回该数组代码: public static int[] randomArr(int size,int group){ int[] arr = new int[size];//规定数组的size for (int i=0;原创 2021-07-02 16:14:17 · 56 阅读 · 0 评论 -
最小公倍数
基于欧几里得算法求最小公倍数代码:package com.ttttttt;/** * m,n为两个数,o为m乘n的积,mul方法为求最小公倍数 */public class Mul { public static long mul(int m, int n){ int o=m*n;//得到n*m的积 while (n!=0){ int rem=m%n; m=n; n=rem;..原创 2021-04-30 13:19:29 · 57 阅读 · 0 评论 -
欧几里得算法
欧几里得算法求最大公因数package com.ttttttt;/** * m,n为两个数,gcd方法为求最大公因数 */public class Gcd { public static long gcd(int m, int n){ while (n!=0){ int rem=m%n; m=n; n=rem; } return m; } public.原创 2021-04-29 22:50:50 · 104 阅读 · 0 评论 -
高效率的幂运算
递归求幂运算package com.ttttttt;public class Pow { public static long pow(int x,int n){ if (n==0)return 1; if (n==1)return x; if (n%2==0)return pow(x*x,n/2); else return pow(x*x,n/2)*x; } public static void main(.原创 2021-04-29 22:26:22 · 75 阅读 · 0 评论 -
二分查找基于递归详解及优化
折半查找这里对插入排序和折半查找进行了封装package com.ttttttt;/** * @return 找到项的索引,如果没有找到则为-1 */public class Search { public static int binarySearch(int[] arr, int a) { charuSort(arr);//运用排序算法,这里使用了插入排序,也可以用冒泡,选择排序等等... int low = 0; int high原创 2021-04-28 17:55:00 · 106 阅读 · 0 评论 -
插入排序详解及代码的优化
插入排序图解:快速排序基于java的代码:package com.ttttttt;public class Sort2 { public static void charuSort(int[] arr){ for (int i=1;i< arr.length;i++){ for (int j=i-1;j>=0&&arr[j]>arr[j+1];j--){ //交换//原创 2021-04-23 19:24:28 · 88 阅读 · 0 评论 -
选择排序详解
选择排序这里小猿采用了封装的方法!接下来讲解实现流程:内部的j循环就相当于把数组中的最小值取出来,赋值于第i位以我给的数组为例,通过i循环的第0位,依次比较j循环的第一位,第二位,以此类推,每比较一次,都将其两者中的最小值赋值与minIndex位外部的i循环就相当于给j的赋值提供一个变化的位置这是我设置的数组:33 22 11 44 55 77 66package com.ttttttt;原创 2021-04-22 21:18:13 · 97 阅读 · 0 评论 -
Java不排序求数组里的最大值
Java中求一个整型数组元素中的最大值没用排序Who 说 get maximum value 必须 sortpublic class test { public static void getmax(int[] arr) { int max = arr[0]; for (int i = 0; i < arr.length; i++) { if (max < arr[i]) { max = arr原创 2021-04-02 22:52:59 · 589 阅读 · 2 评论 -
冒泡排序算法详解及优化
java编写一个方法,其功能是对一个整型数组升序排列(请采用冒泡算法)According to 我的刚学的 konwledge ,the 冒泡就是这样写的public class test { public static void maopao(int[] arr) { for (int i = 0; i <= arr.length - 1; i++) { for (int j = 0; j < arr.length - i - 1; j++)原创 2021-04-02 22:37:11 · 135 阅读 · 0 评论