
算法练习
算法
dayaoK
开发小白
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
哈希表和有序表
哈希表的简单介绍 1)哈希表在使用层面上可以理解为一种集合结构 2)如果只有key,没有伴随数据value,可以使用HashSet结构(C++中叫UnOrderedSet) 3)如果既有key,又有伴随数据value,可以使用HashMap结构(C++中叫UnOrderedMap) 4)有无伴随数据,是HashMap和HashSet唯一的区别,底层的实际结构是一回事 5)使用哈希表增(put)、删(remove)、改(put)和查(get)的操作,可以认为时间复杂度为 O(1),但是常数时间比较大 6)放.原创 2021-02-16 10:09:00 · 1108 阅读 · 0 评论 -
桶排序
桶排序思想下的排序 1)计数排序 2)基数排序 分析: 1)桶排序思想下的排序都是不基于比较的排序 2)时间复杂度为O(N),额外空间负载度O(M) 3)应用范围有限,需要样本的数据状况满足桶的划分 GIF图地址,可手动查看 实现逻辑 设置一个定量的数组当作空桶子。 寻访序列,并且把项目一个一个放到对应的桶子去。 对每个不是空的桶子进行排序。 从不是空的桶子里把项目再放回原来的序列中。 ...原创 2021-02-06 11:48:28 · 149 阅读 · 0 评论 -
比较器
比较器的使用 1)比较器的实质就是重载比较运算符 2)比较器可以很好的应用在特殊标准的排序上 3)比较器可以很好的应用在根据特殊标准排序的结构上 package Demo.sort; import java.util.Arrays; import java.util.Comparator; /** * mail: dayaojiang@foxmail.com * Create by dayao on 2021/2/5 */ public class ComparatorTest { pu原创 2021-02-05 12:26:20 · 302 阅读 · 0 评论 -
HeapSory 堆排序
堆 1,堆结构就是用数组实现的完全二叉树结构 2,完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 3,完全二叉树中如果每棵子树的最小值都在顶部就是小根堆 4,堆结构的heapInsert与heapify操作 5,堆结构的增大和减少 6,优先级队列结构,就是堆结构 堆排序 1,先让整个数组都变成大根堆结构,建立堆的过程: 1)从上到下的方法,时间复杂度为O(N*logN) 2)从下到上的方法,时间复杂度为O(N) 2,把堆的最大值和堆末尾的值交换,然后减少堆的大小之后,再去调 整堆,一直周而复始,.原创 2021-02-03 15:19:29 · 195 阅读 · 0 评论 -
数据结构可视化,动图(GIF)
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html原创 2021-02-02 14:47:24 · 1080 阅读 · 0 评论 -
快速排序
基本思想:(分治) 先从数列中取出一个数作为key值; 将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边; 对左右两个小数列重复第二步,直至各区间只有1个数。 图解: 荷兰国旗问题 给定一个数组arr,和一个数num,请把小于num的数放在数组的 左边,等于num的数放 在数组的中间,大于num的数放在数组的 右边。要求额外空间复杂度O(1),时间复杂度 O(N) private static void partition(int[] arr, int le.原创 2021-02-01 22:19:03 · 194 阅读 · 0 评论 -
认识异或运算
异或运算:相同为0,不同为1 同或运算:相同为1,不同为0 能长时间记住的概率接近0%,所以异或运算就记成无仅为相加! 6 ^ 7 = 1 110 ^ 111= 001(B) =1 (D) 题目一:如何不用额外变量交换两个数 int a = 甲, int b = 乙 a = a ^ b; b = a ^ b; a = a ^ b; 1 a = 甲 ^ 乙, b = 乙 2 a=甲 ^ 乙 , b =甲 ^ 乙 ^ 乙 ( 乙 ^ 乙 = 0)所以 b =...原创 2021-01-25 16:25:34 · 7622 阅读 · 1 评论 -
归并排序
归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。 1.主要思路:归并排序是分治思想,分治模式在每一层递归上有三个步骤: 分解:将n个元素分成个含n/2个元素的子序列。 解决:用合并排序法对两个子序递归的排序。 合并:合并两个已排序的子序列已得到排序结果。 2.实现逻辑 2.1 迭代法 ①原创 2021-01-15 21:02:12 · 197 阅读 · 0 评论 -
希尔排序
希尔排序是由插入排序更高效版,也称为缩小增量排序, 此算法的平均时间复杂度为:,最坏时间时间复杂度为,最好时间复杂度为: 空间复杂度为:1 稳定性:不稳定 我们设置间隔为4 第一次排序,将在1,5,9,13上的数先进行排序,一次 以此类推: 然后缩小间隔再来排序: 最后间隔一定为1再来排一次 代码实现如下 public static void main(String[] args) { int[] arr = {9,6,11,3,5,12,8,7,10原创 2021-01-14 15:10:59 · 374 阅读 · 4 评论 -
插入排序及使用常量替换来实现换位
public static void main(String[] args) { int[] arr = {9,3,1,4,6,8,7,5,2}; sort(arr); print(arr); } static void swap(int[] arr,int i,int j){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } static void sort..原创 2021-01-13 14:14:46 · 133 阅读 · 0 评论 -
leetCoode 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例2: 输入: [4,1,2,1,2] 输出: 4 相关标签 :位运算 哈希表 class Solution { public int singleNumber(int[] nums) { for (int i = 1; i &.原创 2021-01-12 16:39:28 · 138 阅读 · 0 评论 -
Greedy Gift Givers java
题目: 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少。在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人。然而,在任何一群朋友中,有些人将送出较多的礼物(可能是因为有较多的朋友),有些人有准备了较多的钱。给出一群朋友,没有人的名字会长于 14 字符,给出每个人将花在送礼上的钱,和将收到他的礼物的人的列表,请确定每个人收到的比...原创 2018-11-22 13:57:19 · 664 阅读 · 0 评论 -
数据结构-枚举
package Demo; public class Demo { public static void main(String[] args) { Season spring = Season.SPRING; System.out.println(spring); System.out.println(spring.getSeasonDesc()); } } class S...原创 2018-11-13 15:25:01 · 778 阅读 · 4 评论 -
喷水装置(一)
博主的ACM题练习,做得不对的地方,不要喷emmm,我还在学习 时间限制:3000毫秒| 内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为日的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数日(0 <日<15)的圆被湿润,这有充足的喷水装置I(1 <I <600)个,并且一定能把草坪全部湿润,你要做...原创 2018-11-03 10:59:04 · 244 阅读 · 1 评论