算法
文章平均质量分 54
计算机基础爱好者
微信公众号:计算机基础爱好者
展开
-
leetcode 90. 子集Ⅱ
leetcode 90. 子集Ⅱ题目描述题目解析代码实现性能分析题目描述给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。题目解析这类题目是典型的回溯算法,通过剪枝消除重复的子集。以(1,2,2)为例:代码模板一般是:private void dfs(args...){ //因为回溯算法就是典型的递归操作,必须有终止条件 if(...){ return; } for(i原创 2021-09-05 11:40:03 · 81 阅读 · 0 评论 -
关于位运算的骚操作只有你不懂?
关于位运算的骚操作只有你不懂?位移运算的特性1、判断奇偶性2、求一个数2的次方3、交换变量4、假设一个数组中只有一个数出现过1次,其余均出现2次,找出出现一次的这个数5、求二进制数中1的个数6、正整数n,找出大于n,并且最接近2的次方位移运算的特性& (与),两个数都为1相与结果为1,除此之外都为0。| (或),两个数只要有其中一个为1,结果为1。~ (非),这是对单数操作的取反操作,1的非是0,0的非是1。4.(异或),两个数不同异或结果为1,相同为0。例如:10=1,1原创 2020-05-17 20:47:29 · 214 阅读 · 0 评论 -
浅谈float和double
浅谈float和double浅谈float和double举个栗子浅谈float和double今天我们来谈谈Java中的float和double在计算机中是如何存储的。都知道int和float在Java中所占的字节数都是4字节,但是int只能存储整数型,float不仅能储存浮点型,存储范围也比整数大,既然同样的字节数为什么会有不同的效果呢?是因为float和double类型在计算机中的存储结构...原创 2020-04-25 17:56:46 · 2816 阅读 · 0 评论 -
Dijkstra路由最短路径算法
Dijkstra路由最短路径算法Dijkstra路由最短路径算法算法实现Dijkstra路由最短路径算法先简单解释一下该算法的字面含义:根据百度百科的解释为:是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。下面开始图文解释:我们要寻找从a点到...原创 2020-04-19 18:02:19 · 3797 阅读 · 0 评论 -
网络流之最大流
网络流之最大流前言概念解释实现思路代码实现前言根据百度百科解释网络流(network-flows)是一种类比水流的解决问题方法,与线性规划密切相关。网络流的理论和应用在不断发展,出现了具有增益的流、多终端流、多商品流以及网络流的分解与合成等新课题。网络流的应用已遍及通讯、运输、电力、工程规划、任务分派、设备更新以及计算机辅助设计等众多领域。概念解释通俗易懂的说就是从一个起点运输货物到终点,...原创 2020-03-29 22:00:09 · 423 阅读 · 0 评论 -
经典算法的性能分析与比较
排序算法是作为程序员必须掌握的基础技能之一,对经典的排序算法手到擒来是作为一个程序员的基本素养。这里的排序算法没有绝对的优劣,只有根据情况判断合不合适。所以只有我们对它的每一种排序算法的脉络了解的很清楚我们才能更好的在不同的算法之间选择最合适的。原创 2020-03-21 18:09:24 · 1942 阅读 · 1 评论 -
初入职场的IT人如何迅速的成长?
初入职场的IT人如何迅速的成长?1、过硬的基础知识2、吃透常用的框架3、强悍的工程能力4、总结学习java的必修课程算法进阶之路吃透linuxjava版算法进阶之路思想上的成长框架中的基础学习操作系统必修课程算法之路1、过硬的基础知识出入职场,我们没有丰富的项目经验,没有强悍的coding能力,也许也没有深厚的基础知识。但我们必须要有一颗热爱学习的心,热爱这个行业,我们才有可能走的更加长远。...原创 2020-03-19 00:24:51 · 227 阅读 · 0 评论 -
选取重复频率最高前k个数
选取重复频率最高前k个数题目描述题目解析题目描述在一个无序的整数数组中选取重复频率最高的前k个数,例如:整数数组[3,4,5,6,4,3,5,2,3],k=3,则结果集为[3,5,4]。题目解析第一种方法暴力解法:对所有数的频率进行统计,然后用排序算法进行排序找出前k个频率最高的数。如果我们按相对来说最优的排序算法快速排序来进行查找,快速排序代码如下:public static voi...原创 2020-03-17 18:14:40 · 535 阅读 · 0 评论 -
阶乘后的0个数
阶乘后的0个数题目描述题目解析代码实现时间复杂度题目描述假设自然数n,n的阶乘结果(n!)结尾0的个数,例如:3! = 3 * 2 * 1 = 6;末尾0个数等于0,5! = 5 * 4 * 3 * 2 * 1 = 120,末尾0个数等于1.题目解析第一种暴力解法,把结果值算出来之后不断除余10,计数每次等于0的个数。该方法计算量主要在阶乘,时间复杂度为O(n)。第二种解法,因为末尾是...原创 2020-03-13 21:40:11 · 474 阅读 · 0 评论 -
求众数
求众数题目描述题目解析代码实现复杂度计算题目描述求一个给定数组n,其中出现次数最多的元素。说明[4,1,4,5],众数是4。[2,2,1],众数是2。题目解析这道题解法众多,大家最想想到的暴力解法我就不说了,就是穷举统计所有的数出现的次数。这种算法在保证空间复杂度为O(1)的情况会出现两次循环,导致时间复杂度为O(n^2)。也可以实现时间复杂度为O(n)的情况,但是空间复杂度就会为O(...原创 2020-01-01 15:41:53 · 440 阅读 · 0 评论 -
有序数组的两数之和
有序数组的两数之和题目描述题目解析代码实现复杂度计算题目描述给定一个升序数组,给定一个目标值,在数组中找出两数之和等于目标值。说明:返回的下标值(index1 和 index2)从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 ...原创 2019-12-29 18:57:46 · 707 阅读 · 0 评论 -
逆波兰表示法
逆波兰表示法题目描述题目解析代码实现复杂度计算题目描述根据逆波兰表示法,求表达式的值。其实就是将中缀表达式转换成后缀表达式求值的过程。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) = 9...原创 2019-12-29 13:36:11 · 187 阅读 · 0 评论 -
LRU缓存机制
LRU缓存机制题目描述题目解析代码实现复杂度计算题目描述根据使用频率来改变缓存队列,每次查询如果缓存中不在,则把查询结果放到缓存队列中,如果缓存队列满了,则根据使用频率来删除频率最低的数据,每次查询会增加该值的使用频率。PS:这里的使用频率是当前使用时间越靠前,使用频率越高。题目解析我的解题思路是用一个队列,每次来新值从队尾进入,查询命中后将值进入队尾,如果队列满后,从对头删除,将值插入...原创 2019-11-24 16:14:50 · 95 阅读 · 0 评论 -
环形链表
环形链表题目描述题目解析代码实现复杂度计算题目描述题目的意思是查找一个链表中是否有环,有环返回true,无环返回false。题目解析例如:1->2->4->5->1 则返回true,有环,5连回头部。1->3->5->3->4 返回true,有环,5指向3。1->3->2->4 返回false,没有环。这道题在lee...原创 2019-11-10 22:53:33 · 110 阅读 · 0 评论 -
单词拆分
单词拆分单词拆分题目描述题目解析代码实现复杂度分析单词拆分题目描述1、一个非空字符串中msg中可以拆分出在字典中得那些单词;2、是否在一个非空字典中完全可以被拆分成一个或多个单词。题目解析1、先说说可以拆分出那些单词在词典中,可以利用深度优先搜索,什么是深度优先搜索可以百度,如果不懂怎么用可以参考上一篇文章:分割回文串2、是否可以完全拆分成一个或多个单词思路是利用“动态规划算法”,...原创 2019-11-03 01:13:15 · 255 阅读 · 0 评论 -
分割回文串
分割回文串题目解析题目解析代码实现复杂度分析题目解析顾名思义就是给定一个字符串,找出其中所有的子回文串,例如:“aabaa”,所有的回文串有:[“a”,“a”,“b”,“a”,“a”],[“aa”,“aa”],[“aba”],[“aabaa”]。题目解析要找出所有的方法,有两种方法,深度优先搜索(DFS),广度优先搜索(BFS)。我这篇文章要讲的方式深度优先搜索,递归找出所有的字串。例如:...原创 2019-10-27 19:20:11 · 118 阅读 · 0 评论 -
验证回文串
验证回文串题目描述题目解析代码实现复杂度的计算题目描述一个字符串从前往后读和从后往前读相等,只包括字母和数字。示例:1输入:"hello,how are you?u,oy。era w,oh,oll eh";输出:true示例:2输入:"hello";输出:false题目解析解题思路是先全部转换为小写,设定两个指针,一个从前往后读,一个从后往前读。逐个匹配,遇到特殊字符跳过...原创 2019-10-20 15:02:50 · 95 阅读 · 0 评论 -
买卖股票的最佳时机
买卖股票的最佳时机题目描述题目解析状态转移方程边界代码实现复杂度的计算题目来源于 LeetCode 上第 123 号问题:买卖股票的最佳时机 III。题目难度为 Hard,目前通过率为 36.1% 。题目描述给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购...原创 2019-10-20 14:10:58 · 140 阅读 · 0 评论 -
返回序列中有相同元素的索引
Search for a Range搜索在序列中搜索有相同关键字的索引例如:[1,2,3,3,5,6,7,7];搜索3,则返回:[2,3];一、利用二分搜索的思想搜索先搜索左边的元素int lo = 0; int hi = a.length - 1; while (lo < hi) { int mid = (lo + hi)...原创 2019-08-25 17:42:29 · 453 阅读 · 0 评论 -
B树算法分析
B树和B+树算法分析B树也就是平常看到的B-树,以前我一直认为B-树叫做B减树,就像B+树叫做B加树一样,其实B-树中间那个只是杠而已,所以以后大家不要读错了。好了,话不多说开始正题。一种算法的出现必然是有需求引起的,那为什么有了二叉树这种算法还会发明B树这种数据结构呢,有了B树为什么又要出现B+树这种数据结构呢?我也看过不少这两种算法的各种分析和解读。我想我得出的结论主要是因为减少磁盘IO树...原创 2019-08-18 12:44:29 · 975 阅读 · 0 评论 -
求一个字符串中没有重复的最大字串
求一个字符串中没有重复的最大字串例如:"hello"最大字串是hel,所以是3."abccdaeh"最大字串是cdaeh,所以是5.思路讲解:设计一个滚动条,从左向右开始滚动,如果没有遇到前面的重复字符,则滚动条+1,如果遇到前面有相同的字符,则截取前面到相同字符的哪一位,后面滚动条继续滚动。前面字符有没有出现过则采用字典的形式,如果只有小写字母的字符串,则字典数量只有26位,设计一个26位...原创 2019-08-28 23:39:03 · 240 阅读 · 0 评论 -
求解数组中三数和为零的结果
##求解数组中三数和为零的结果求解 a + b + c = 0;a、b、c不能重复例如:{-9, 1, 3, -5, 4, 5, 8};则返回[-9, 1, 8]和[-5, 1, 4]讲解思路:先将数组排序然后从头开始遍历,如果第一个数大于0,由于是排好序的所以后面不可能有出现和为0的情况。所以取出第一个数后,设目标树为target = 0 - a[k];剩下的求解思路就是target...原创 2019-08-29 18:21:02 · 379 阅读 · 0 评论 -
删除倒数第n个数
##删除倒数第n个数要求时间复杂度是O(n) 即通过一遍扫描就可以找出结果思路:通过两个指针,两个指针之间相差n,然后两个指针同时向后走,直到走到末尾,删除前一个指针指向的数即可。时间复杂度和空间复杂度都是O(n)public static List<Integer> find(List<Integer> list,int n){ int length =...原创 2019-08-30 13:21:44 · 165 阅读 · 0 评论 -
KMP算法:最长字符串匹配算法
KMP算法:最长字符串匹配算法查找模式串在目标串中的位置例如:目标串"asdasdaabbccaabsesdf" 模式串:“aabbccaabse” 则返回6,表示从索引下标是6开始匹配。(假设模式串索引为6‘a’的前缀:(a、aa、aab、aabb、aabbc、aabbcc、ab、abb、…)后缀也是一样,只不过是以索引6‘a’为分割的后面字符串所有字串类型。(a、aa、aab、aabs、...原创 2019-08-30 16:27:02 · 2823 阅读 · 1 评论 -
有效的括号
有效的括号题目描述给定一个只包括"()[]{}"的字符串,判断字符串是否有效。有效字符串需满足:1. 左括号必须用相同类型的右括号闭合。2. 左括号必须以正确的顺序闭合。例如:“(asda)[(a)]{}” 满足“[{(windows)}]” 满足“)[asd]” 不满足“()]{}” 不满足“]kjlkj” 不满足解题思路:将字...原创 2019-09-01 16:21:45 · 127 阅读 · 0 评论 -
打印杨辉三角形
打印杨辉三角形 打印杨辉三角形 杨辉三角形就是呈现金字塔型的结构 每个的数字表达式为:a(n,x) = a(n - 1,x) + a(n - 1,x - 1) 结构如下:11,11,2,11,3,3,11,4,6,4,1 解题思路:循环打印的行数,由于对称型每行的数据类型可以只计算一半,后面的一半完全对折过来。上代码:public static L...原创 2019-09-25 17:44:22 · 264 阅读 · 0 评论 -
异或算法求数组中出现单次的数
一个数组中只有一个数出现一次,其它数出现偶次项,求这个只出现一次的数先讲异或的性质,对于二进制来说,相同的数异或为0,不同的数异或为1.例如:1^1=00^0=01^0=1根据上面一位数的异或有这个性质,多位数仍然有这个性质,如果字长是8位的,则00101110^00101110=0,得出46^46=0.所以两个相同的数异或为0。现在回归问题:1、数组中每个出现两个的数最后异或结...原创 2019-08-13 16:36:20 · 229 阅读 · 0 评论