算法
文章平均质量分 80
抽离的心
其实我们大家的努力程度还远远没有到拼智商的程度(⊙o⊙)
展开
-
如何判断两个链表是否相交?如果相交求交点
问题描述:一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点。(注意两个单链表相交不会出现X型交叉——单链表,每个节点只有一个指针域)。第一种情况:两个链表均不含有环解题思路:1、直接法:采用暴力的方法,遍历两个链表,判断第一个链表的每个结点是否在第二个链表中,时间复杂度为O(len1*len2),耗时很大;顺序查询到第一个在第二个链表种的节点即是两个链表的交点。2、先遍历第一个链表...原创 2018-06-23 22:34:05 · 10425 阅读 · 2 评论 -
Top K问题详解
一、Top K问题的概述 在大规模数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题。例如在搜索引擎中,统计搜索最热门的10个查询词;在歌曲库中统计下载最高的前10首歌等。针对top K类问题通常比较好的方案是分治+Trie树/hash+小顶堆,即先将数据集按照Hash方法分解成多个小数据集...原创 2018-10-14 22:39:14 · 1774 阅读 · 1 评论 -
堆排序算法详解
一、堆排序算法原理和动态图解 将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根节点。将它移走(其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的n-1个序列重新构造成一个堆,这样就会得到n个元素中的次最大值。如此反复执行,就能得到一个有序序列了。这个过程其实就是先构建一个最大/最小二叉堆,然后不停的取出最大/最小元素(头结点),插入到新的队...原创 2018-10-14 16:45:41 · 30560 阅读 · 24 评论 -
两个大数相算法研究
1.在平常的业务中也许会有很大的数字无法使用int或者long来存储了,那么只能存储成string类型,当需要两个这样的数字相加的时候,怎么办呢?算法如下所示:package com.luna.base;//借用了工具包commons-lang3import org.apache.commons.lang3.StringUtils;public class BigNu...原创 2018-09-19 22:05:01 · 372 阅读 · 0 评论 -
如何判断一个字符串是否是数字?
1.用JAVA自带的函数package com.luna.test;public class IsNUmber { public static void main(String[] args) { String s1 = "10"; String s2 = "-10"; String s3 = "a10"; String s4 = "10b"; String s5 =...原创 2018-07-26 23:08:41 · 2100 阅读 · 1 评论 -
判断一个数字是否为素数
素数的定义 如果一个正整数p只有两个因子1和p,则称p为素数。素数算法实现一public boolean isPrime1(int n) { //判断一个数字是否为质素:时间复杂度为O(n) if (n < 2) return false; for (int i = 2; i < n; ++i) if (n % i == 0) return false; ...原创 2018-07-15 10:49:38 · 927 阅读 · 0 评论 -
数据结构经典算法
1.数组中除了两个数只出现过一次,其他的均出现过两次,请找出这两个只出现过一次的数。 例如:{10,9,8,7,6,6,7,8,9,10,5,5,4,3};4和3只出现过一次,请找出出现过一次的数。首先想到的代码应该是上一个提到的遍历两次取出没有找到的相同的数字,代码如下:public static List findOnlyNum(int[] array) { List&...原创 2018-07-25 22:13:03 · 1615 阅读 · 0 评论 -
Java排序算法进阶(希尔、堆、归并、奇偶)
package com.luna.test;import java.util.ArrayList;import java.util.List;public class JavaSort { public static void main(String[] args) { int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98...原创 2018-07-23 23:20:07 · 451 阅读 · 0 评论 -
递归实现Long、Integer、String逆序输出
1.递归逆序输出Integer类型的正整数字符串:/** * 递归输出反转后Integer类型字符串 * @param a * @return */ public static String reverseIntToStringForLoop(Integer a) { if (a < 0) return ""; if (a < 10) return...原创 2018-06-16 22:21:57 · 519 阅读 · 0 评论 -
Java经典递归算法
1.斐波那契数列package com.luna.base;public class BirthRabbit { public static void main(String[] args) { int i = 1; for (i = 1; i <= 20; i++) { System.out.println("兔子第" + i + "个月的总数为:" + f(i)); ...原创 2018-06-16 23:17:57 · 61513 阅读 · 1 评论 -
Java排序算法经典实现(冒泡、快速、选择、插入)
package com.luna.sort; public class JavaSort { public static void main(String[] args) { int a[] = { 10, 1, 8, 20, 9, 67, 73, 91 }; // bubbleSort(a); // // insert...原创 2018-04-30 16:50:29 · 1705 阅读 · 0 评论 -
Java自定义对象实现双向链表
package com.luna.util;/** * 定义双向链表结构对象:考虑到双向链表可以存储基本数据类型、字符串、对象故节点封装用泛型参数; * 考虑到双向链表数据结构的隐私和安全性,链表的所有属性和节点内部定义类均用private修饰;双向 * 链表:双向链表(双链表)是链表的一种。和单链表一样,双链表也是由节点组成,它的每个数据结点中 * 都有两个指针,分别指向直接后继和...原创 2019-04-05 17:45:10 · 628 阅读 · 0 评论