Java数据结构与算法
数据结构
lovoo
不要抱怨生活,只因你还不够努力!
展开
-
爬虫中的网页去重最适合的算法---simhash算法
Simhash算法是一种用于字符串相似度比较的算法,它可以用于爬虫中的网页去重。Simhash算法的基本思想是将字符串分解成一些基本的特征,如字符、单词、n-gram等,然后对每个特征计算一个hash值,并将这些hash值合并成一个整体hash值。对于两个字符串,如果它们的整体hash值相似,那么它们的内容也就相似。需要注意的是,Simhash算法也存在一些问题。例如,对于一些相似的字符串,它们的整体hash值可能相差很大,这就会影响去重的准确性。原创 2023-06-29 16:52:36 · 1228 阅读 · 0 评论 -
Java使用算法获取平方根的正数部分
试想输入一个数大于2的正整数X,那么它的平方根必然是 2< √x < x - 1,也就是说 √x 是 它们中间的某个值,不妨设三个变量index、L、R,其中index表示找到的值,L表示从左边开始找的值,R表示从右边开始找的边界值,当L原创 2023-04-20 22:42:01 · 44 阅读 · 0 评论 -
raft算法演示地址
演示地址:https://raft.github.io/分布式系统中实现一致性的 raft 算法、paxoshttp://thesecretlivesofdata.com/raft/原创 2021-07-13 16:39:16 · 119 阅读 · 0 评论 -
Java冒泡排序的改进,使用最少的循环进行排序
冒泡排序(英语:Bubble Sort)又称为泡式排序,是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。i++) {j++) {} } System.out.println("第" + i + "轮冒泡====" + Arrays.toString(arr ));if(!swap) {原创 2023-04-13 11:02:58 · 98 阅读 · 0 评论 -
Java每日算法--实现 strStr() 函数。 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开
题目:实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1示例 1:输入:haystack = "hello", needle = "ll"输出:2示例 2:输入:haystack = "aaaaa", needle = "bba"输出:-1示例 3:输入:haystack = "", needle = ""输出:0解法1:原创 2021-07-11 08:40:37 · 1710 阅读 · 0 评论 -
Java每日算法--给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 * 示例 1: * 输入:nums = [3,2,2,3], val = 3 * 输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例原创 2021-07-08 17:29:58 · 1393 阅读 · 0 评论 -
Java每日算法--集合 s 包含从 1 到 n 的整数。
题目:集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。示例 1:输入:nums = [1,2,2,4]输出:[2,3]示例 2:输入:nums = [1,1]输出:[1,2]来源:力扣(LeetCode)解法1:暴力破解使用双循环进行原创 2021-07-05 10:14:35 · 808 阅读 · 0 评论 -
Java每日算法--将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]来源:力扣(LeetCode)链表节点public class ListNode { int val; ListNode next;原创 2021-07-01 23:07:41 · 1123 阅读 · 1 评论 -
Java每日算法--给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true来源:力扣(LeetCode)原创 2021-06-30 23:06:35 · 4706 阅读 · 0 评论 -
Java每日算法--编写一个函数来查找字符串数组中的最长公共前缀。
题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。来源:力扣(LeetCode)解法1:1.1)选择strs[0]作为要比较的字符串,然后对数组进行遍历,1.2)当其它字符串都不以strs[0]为开始时,继续循环1.3)如果st原创 2021-06-29 23:14:11 · 1706 阅读 · 0 评论 -
Java每日算法--罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
题目:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。原创 2021-06-28 23:08:44 · 1819 阅读 · 0 评论 -
Java每日一算法--给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 示例 1: 输入:x = 121 输出:true 示例 2: 输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入:x = 10 输出:f原创 2021-06-27 22:49:51 · 3310 阅读 · 0 评论 -
Java每日算法--给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:-231 <= x <= 231 - 1来源:力扣(LeetCod原创 2021-06-26 23:26:31 · 1903 阅读 · 5 评论 -
Java每日算法--给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标
题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target原创 2021-06-25 13:46:41 · 2102 阅读 · 2 评论 -
Java每日一道算法--请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数
题目:请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。解法1:使用java自带的函数public static int hammingWeight(int n) { return Integer.bitCount(n); }解法2:使用 & 符, 两个操作数中位都为1,结果才为1,否则结果为0public static int ha原创 2021-06-24 11:57:23 · 571 阅读 · 0 评论 -
java架构师项目实战,高并发集群分布式,大数据高可用视频教程
—————————————————————————————————————————————————–java架构师项目实战,高并发集群分布式,大数据高可用视频教程,共760G下载地址:https://item.taobao.com/item.htm?id=55588852620101.高级架构师四十二个阶段高 02.Java高级系统培训架构课程148课时 03.Java高级互联网架构师课程 0原创 2017-09-12 14:51:59 · 2062 阅读 · 2 评论 -
Java数据结构之递归与三角函数的运用,使用3种方法实现三角
package com.struct.recusion;/** * @描述 递归与三角函数的运用 * @项目名称 Java_DataStruct * @包名 com.struct.recusion * @类名 Recusion * @author chenlin * @date 2010年6月28日 下午8原创 2016-06-28 20:32:02 · 1319 阅读 · 0 评论 -
Java 数据结构之数组的操作一:初级
package com.java.array;/** * @描述 数组的操作 * @项目名称 Java_DataStruct * @包名 com.java.array * @类名 ArrayDemo * @author chenlin * @date 2010年5月22日 下午3:45:49 * @ver原创 2016-05-22 16:11:25 · 372 阅读 · 0 评论 -
java编程:斐波那契数列经典案例:兔子问题
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?package com.java.recursion;/** * @描述 三种方法实现斐波那契数列 * @项目名称 Java_DataStruct * @包名 com.java.recursion * @类名 Fibonacci *原创 2016-06-17 21:29:25 · 6800 阅读 · 0 评论 -
Java 用两种方法实现插入排序
一、概述:排序算法是最简单的算法,也是最基本的算法。顾名思义,插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。特点是简单,不需要额外的存储空间,在元素少的时候工作得好。二、示例图:三、代码实现/** * @描述 数组排序 * @项目名称原创 2016-06-24 21:10:18 · 2801 阅读 · 0 评论 -
Java 数据结构之双向链表
一、概述:1、什么时双向链表: 链表中的每个节点即指向前面一个节点,也指向后面一个节点,就像丢手绢游戏一样,每个人都手拉手 2、从头部插入 要对链表进行判断,如果为空则设置尾节点为新添加的节点,如果不为空,还要设置头节点的一个前节点为新节点 3、从尾部进行插入 如果链表为空,则直接设置头节点为新添加的节点,否则设置尾节点的后一个节点为新添加的节点。同时设置新添加的节点的前一个节点为尾原创 2016-06-27 21:09:10 · 11739 阅读 · 0 评论 -
Java数据结构之简单的连接点(link)实现
一、概述: 链接点由:数据和指向下个数据的指针构成 如图: 二、简单实现:package com.java.link;/** * @描述 TODO * @项目名称 Java_DataStruct * @包名 com.java.link * @类名 Link * @author chenlin * @date 2011年6月13日 下午8:41:37 */public class原创 2016-06-13 20:44:44 · 1924 阅读 · 0 评论 -
Java数据结构之有效队列
/** * @描述 有序对列 * 从任何位置插入数据都是有序的 * @项目名称 Java_DataStruct * @包名 com.java.stack * @类名 Queue * @author chenlin * @date 2011年6月5日 下午8:12:47 */public class SequeQueue { private long[] arr; pr原创 2016-06-13 20:25:24 · 485 阅读 · 0 评论 -
Java 数据结构之双端链表
一、概述:1、什么时双端链表: 链表中保持这对最后一个连点引用的链表2、从头部插入 要对链表进行判断,如果为空则设置尾节点为新添加的节点3、从尾部进行插入 如果链表为空,则直接设置头节点为新添加的节点,否则设置尾节点的后一个节点为新添加的节点4、从头部删除 判断节点是否有下个节点,如果没有则设置节点为null二、具体实现原创 2016-06-26 11:57:17 · 662 阅读 · 0 评论 -
Java 数据结构之数组的操作三:实现各种排序方法
使用对象数组实现各种排序方法package com.java.array;/** * @描述 TODO * @项目名称 Java_DataStruct * @包名 com.java.array * @类名 Person * @author chenlin * @date 2010年5月23日 下午7:24:原创 2016-06-05 16:12:43 · 612 阅读 · 0 评论 -
Java 数据结构之数组的操作二:数据插入与二分查找法
增加数据插入与二分查找法:/** * @描述 数组的操作 * @项目名称 Java_DataStruct * @包名 com.java.array * @类名 ArrayDemo * @author chenlin * @date 2010年5月22日 下午3:45:49 * @version 1.0 */public class ArrayDemo2 { private in原创 2016-06-05 16:11:29 · 527 阅读 · 0 评论 -
Java数据结构之简单的链表的实现
一、概述:1、原理: 只有一个数据项(链接点Link),每个数据插入时都是对第一个数据的引用。2、插入数据说明: 当链表没有数据时,插入的值就是第一个数据,如果链表里有数据,就把当前的数据的next指针指向第一个数据。3、插入数据图: 4、特点:先进后出 5、实现功能: 数据插入,指定位置插入,显示,查询,删除等6、删除原理 7、插入头节点原理 8、删除头Node原理deleteFirs原创 2016-06-14 20:37:26 · 673 阅读 · 0 评论 -
Java 队列2:循环队列
一、概述: 1、原理: 与普通队列的区别在于循环队列添加数据时,如果其有效数据end == maxSize - 1(最大空间)的话,end指针又移动到-1的位置 删除数据时,如果head== maxSize时 head指针移动到0的位置2、示例图: package com.java.queue;/** * @描述 对列 * @项目名称 Java_DataStruct * @包名 com原创 2016-06-12 21:11:37 · 595 阅读 · 0 评论 -
Java 数据结构之队列
一、概述:1、说明: 队列的原则时先进先出,就像生活中排队取票一样,谁排在前面谁先得到2、有五个属性: 1)数组元素 2)最大空间 3)长度 4)队头 5)队尾3、示例图: 二、代码实现/** * @描述 对列 * @项目名称 Java_DataStruct * @包名 com.java.stack * @类名 Queue * @author chenlin * @date原创 2016-06-05 21:02:43 · 519 阅读 · 0 评论 -
Java 希尔排序
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止代码:/** * @描述 希尔排序 * @项目名原创 2016-06-29 20:45:43 · 335 阅读 · 0 评论 -
Java 快速排序
package com.struct.array;import java.util.Random;/** * @描述 快速排序 * @项目名称 Java_DataStruct * @包名 com.struct.array * @类名 QuickSort * @author chenlin * @date 2原创 2016-06-30 21:23:59 · 371 阅读 · 0 评论 -
Java 三种线性排序之计数排序
一.算法说明: 一般的排序都是需要进行关键字的比较的。有没有不需要比较的的呢?有的,计数排序就是其中一种。 计数排序 假设输入序列都是0到k之间的整数,则可使用计数排序。具体操作是这样的:创建一个同类型同等大小的临时数组temp,用于备份输入序列。创建一个整型大小为k的数组count,用于统计序列中各元素出现的次数。接下来只需把备份序列从大到小放回原数组即可。二.示例图三.算法的Java实现pu原创 2016-07-26 22:48:45 · 1469 阅读 · 0 评论 -
java 输入一个字符串,打印出该字符串中字符的所有排列
public class JavaDemo {public static void main(String[] args) { String str = ""; Scanner scan = new Scanner(System.in); str = scan.nextLine(); permutation(str.toCharArray(), 0);}public st原创 2016-07-26 23:10:13 · 5555 阅读 · 0 评论 -
Java 4种方法实现选择排序算法
说明: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 如图: 代码:/** * @描述 数组排序 * @项目名称 Java_DataStruct * @包名 com.struct.array * @类名 ArraySort * @author chenlin * @date 2010年6月22日 下午8:28:4原创 2016-06-23 20:51:42 · 555 阅读 · 0 评论 -
Java 4种方法实现冒泡排序算法
一、基本思路:冒泡排序是一种简单的交换类排序。其基本思路是,从头开始扫描待排序的元素,在扫描过程中依次对相邻元素进行比较,将关键字值大的元素后移。每经过一趟排序后,关键字值最大的元素将移到末尾,此时记下该元素的位置,下一趟排序只需要比较到此位置为止,直到所有元素都已有序排列。一般地,对n个元素进行冒泡排序,总共需要进行n-1趟。第1趟需要比较n-1次,第2趟需要比较n-2次,……第i趟需要比较n-i原创 2016-06-22 20:58:46 · 778 阅读 · 0 评论 -
Java 数据结构之有序数组,二分查找法
1 、插入数据图 2、二分查找示意图: package com.struct.array;/** * @描述 有序数组 * @项目名称 Java_DataStruct * @包名 com.struct.array * @类名 BasicArray * @author chenlin * @date 2011年6月20日 下午8:41:21 */public class OrderA原创 2016-06-21 20:58:27 · 847 阅读 · 0 评论 -
Java 数据结构数组实现(增删改查)
1、删除原理: package com.struct.array;/** * @描述 基本数组 * @项目名称 Java_DataStruct * @包名 com.struct.array * @类名 BasicArray * @author chenlin * @date 2011年6月20日 下午8:原创 2016-06-20 21:15:27 · 4725 阅读 · 0 评论 -
Java 树结构、二叉树
一、概述: 1、特征:路径、根、父节点、子节点、子树、访问节点、遍历、层、关键字 2、二叉树: 1)每个节点最多有两个子节点 2)每个节点之间只有一条路径 3)小于父节点的在左边,大于的在右边。二、实现二叉树: 1、创建子节点:Node/** * @项目名称 Java_DataStruct * @包名 com.java.tree * @类名 Node * @author chen原创 2016-06-18 22:56:11 · 654 阅读 · 1 评论 -
Java 数据结构之 三角数据
/** * @描述 三角数据 * 1 3 6 10 * * 1 1 1 1 * 1 1 1 1 1 1 * 1 1 1 1 1 1 * 1 1 1 1 *原创 2016-06-17 20:30:22 · 498 阅读 · 0 评论 -
Java 数据结构之栈的基本实现
一、概述:1、基本概念: 栈是一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶 浮动;栈中元素个数为零时称为空原创 2016-06-05 17:42:11 · 538 阅读 · 0 评论