- 博客(16)
- 收藏
- 关注
原创 思路二分享
如果每个机子都有一个队列用于排队。那整体可以大改分为两步。有n个任务,k组node,一天运行12h1、LeetCode1723把任务按时间均分给机子,肯定考虑优先级2、leetcode1986给任务排序,一天12h空闲,但排队了30h,2,4,6,8,10打个比方 2+4+6,8,10 肯定比不上2+10,4+8,6考虑优先级,4+8在2+10前面,8在4前面问题:这两题的解法用到动态规划+状态压缩->“暴力”有 100 顶不同类型的帽子,且每一顶帽子从 1 到 100 都
2022-01-04 14:14:11
176
原创 贪心算法
介绍贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。贪心算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。集合覆盖问题假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号遍历所有的广播电台, 找到一个覆盖了最多未覆盖的地区的电台(此电台可能包含一些已覆盖的地区,但没有关系)将这个电台加入到一个集合中(比如Ar
2021-04-24 21:50:31
109
原创 KMP算法
KMP是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法。KMP方法算法就利用之前判断过信息,通过一个next数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过next数组找到,前面匹配过的位置,省去了大量的计算时间非常详细的讲解,引用他人代码实现public class KMPAlgorithm { public static void main(String[] args) { String str1 = "abejabcdbe bcdbc
2021-04-23 20:53:46
80
原创 动态规划算法
动态规划介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。 ( 即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解 )每一个阶段可能包括很多状态,前后阶段的状态通过决策联系在一起。
2021-04-22 12:01:05
89
原创 分治算法
分治算法介绍字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题二分搜索大整数乘法棋盘覆盖合并排序快速排序线性时间选择最接近点对问题循环赛日程表汉诺塔分治法在每一层递归上都有三个步骤:分解:将原问题分解为若干个规模较小,相互独立,
2021-04-20 19:21:06
86
原创 二分查找算法(非递归)
二分查找算法(非递归)介绍二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法的运行时间为对数时间O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n步,假设从[0,99]的队列(100个数,即n=100)中寻到目标数30,则需要查找步数为㏒₂100 , 即最多需要查找7次( 2^6 < 100 < 2^7)public class BinarySearchNoRecur { public static void main(String[
2021-04-20 18:50:23
200
原创 java数据结构与算法——树结构实际应用
树结构实际应用堆排序标题二级目录三级目录堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆标题二级目录三级目录...
2021-04-20 17:32:52
160
原创 java数据结构与算法——树结构基础
树二叉树**概念****遍历****删除**代码实现数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低。链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)。树存储方式的分析优点:能提高数据存储,读取的效率, 比
2021-03-21 19:24:25
73
原创 java数据结构与算法——哈希表
哈希表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。public class HashTabTest { public static void main(String[] args) { //创建哈希表 HashTab hashTab = new HashTab(7);
2021-03-18 10:48:07
104
原创 java数据结构和算法——查找
查找优化二分查找插值查找斐波那契查找优化二分查找解决无法查找多个重复值的问题public class BinarySearch { public static void main(String[] args) { int arr[] = { 1, 2, 3, 3, 3, 6, 7, 8, 8, 10, 12, 12, 13}; List<Integer> resIndexList = binarySearch(arr, 0, arr.length -
2021-03-15 20:30:06
80
原创 java数据结构和算法——排序
排序时间复杂度插入排序直接插入排序希尔排序(交换法和移动法)选择排序简单选择排序堆排序(图结构再说)交换排序冒泡排序快速排序归并排序基数排序时间复杂度一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n) / f(n) 的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作 T(n)=O( f(n) ),称O( f(n) ) 为算法的渐进时间复杂度,简称时间复杂度。T(n) 不同,但时间复杂度可能
2021-03-14 22:00:26
283
原创 java数据结构和算法——递归与迷宫和八皇后问题
递归迷宫问题八皇后问题递归调用规则:执行一个方法时,就创建一个新的受保护的独立空间(栈空间)。方法的局部变量是独立的,不会相互影响, 比如n变量。如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据。递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError。当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。迷宫问题public class Maze {
2021-03-13 10:45:46
151
1
原创 java数据结构和算法——栈与逆波兰计算器
栈及使用栈应用场景代码实现(数组模拟,链表用头插法)栈实现计算器(多位+ - * /)中缀表达式代码实现中缀表达式转后缀表达式逆波兰计算器(多位+ - * / 和 ( ) )后缀表达式代码实现栈栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,
2021-03-11 16:48:22
134
原创 java数据结构和算法——稀疏数组和队列
稀疏数组实际需求编写的五子棋程序中,有存盘退出和续上盘的功能。因为该二维数组的很多值是默认值0(无棋子), 因此记录了很多没有意义的数据→稀疏数组。队列
2021-03-10 09:22:33
209
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人