算法练习
算法
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 · 1069 阅读 · 0 评论 -
桶排序
桶排序思想下的排序1)计数排序2)基数排序分析:1)桶排序思想下的排序都是不基于比较的排序2)时间复杂度为O(N),额外空间负载度O(M)3)应用范围有限,需要样本的数据状况满足桶的划分GIF图地址,可手动查看实现逻辑设置一个定量的数组当作空桶子。 寻访序列,并且把项目一个一个放到对应的桶子去。 对每个不是空的桶子进行排序。 从不是空的桶子里把项目再放回原来的序列中。...原创 2021-02-06 11:48:28 · 128 阅读 · 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 · 283 阅读 · 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 · 161 阅读 · 0 评论 -
数据结构可视化,动图(GIF)
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html原创 2021-02-02 14:47:24 · 1024 阅读 · 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 · 173 阅读 · 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 · 7428 阅读 · 1 评论 -
归并排序
归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。1.主要思路:归并排序是分治思想,分治模式在每一层递归上有三个步骤:分解:将n个元素分成个含n/2个元素的子序列。 解决:用合并排序法对两个子序递归的排序。 合并:合并两个已排序的子序列已得到排序结果。2.实现逻辑2.1 迭代法①原创 2021-01-15 21:02:12 · 115 阅读 · 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 · 342 阅读 · 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 · 113 阅读 · 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 · 113 阅读 · 0 评论 -
Greedy Gift Givers java
题目:对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少。在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人。然而,在任何一群朋友中,有些人将送出较多的礼物(可能是因为有较多的朋友),有些人有准备了较多的钱。给出一群朋友,没有人的名字会长于 14 字符,给出每个人将花在送礼上的钱,和将收到他的礼物的人的列表,请确定每个人收到的比...原创 2018-11-22 13:57:19 · 632 阅读 · 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 · 743 阅读 · 4 评论 -
喷水装置(一)
博主的ACM题练习,做得不对的地方,不要喷emmm,我还在学习时间限制:3000毫秒| 内存限制:65535 KB难度:3描述现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为日的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数日(0 <日<15)的圆被湿润,这有充足的喷水装置I(1 <I <600)个,并且一定能把草坪全部湿润,你要做...原创 2018-11-03 10:59:04 · 221 阅读 · 1 评论