数据结构与算法
文章平均质量分 74
常敲代码手不生
你越优秀,这个世界便越公平!!!
展开
-
你会用Java实现两个大数相加吗
两个大数相加(Java) * 1、是整数; * 2、两个数无限大,long都装不下; * 3、不能用BigInteger; * 4、不能用任何包装类提供的运算方法; * 5、两个数都是以字符串的方式提供。 * 思路: * 字符串逐位相加,需要进位则进位处理,考虑两个问题: * 1、char怎么转换为integer, 减去'0'即可 * 2、怎么处理对应位相加?反转字符串相加,正确处理进位即可, * 这样个位对应个位,十位对应十位,剩余的直接追加public class ..原创 2021-06-16 15:49:05 · 344 阅读 · 0 评论 -
可能是最好理解的二叉树的层序遍历
题目描述:二叉树的层序遍历,按层数输出每一层的结果数组代码实现class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<List<Integer>>(); Queue<TreeNode> queue = n原创 2021-05-30 12:22:48 · 56 阅读 · 0 评论 -
30 | 图的表示:如何存储微博、微信等社交网络中的好友关系?
列出功能需求->翻译成逻辑算法->抽象出数据结构->确定物理存储结构 后面的不会脱离前面的独立存在,只存在于工作流的运用中,所以不能把它们独立地看。问题引入在微博中,两个人可以互相关注;在微信中,两个人可以互加好友。如何存储微博、微信等这些社交网络的好友关系吗?图的概念图 特点: 非线性数据结构; 图中的元素就叫做顶点(vertex); 图中的一个顶点可以与任意其他顶点建立连接关系,这叫做边; 举例:微信 一原创 2021-05-16 18:14:21 · 222 阅读 · 0 评论 -
29 | 堆的应用:如何快速获取到Top 10最热门的搜索关键词?
为什么评价算法性能是根据时间和空间复杂度,而不是别的参数?是因为计算机结构是冯诺依曼体系,除了输入输出设备和控制器,就剩下运算器和存储器了问题引入搜索引擎的热门搜索排行榜功能是如何实现的?搜索引擎每天会接收大量的用户搜索请求,把这些用户输入的搜索关键词记录下来,然后再离线地统计分析,得到最热门的 Top 10 搜索关键词。假设现在我们有一个包含 10 亿个搜索关键词的日志文件,如何能快速获取到热门榜 Top 10 的搜索关键词呢?堆这种数据结构几个非常重要的应用:优先级队列、求 Top K 和求原创 2021-05-15 15:19:59 · 613 阅读 · 0 评论 -
28 | 堆和堆排序:为什么说堆排序没有快速排序快?
如何理解“堆”堆排序是一种原地的、时间复杂度为 O(nlogn) 的排序算法堆的两个特点:一颗完全二叉树 堆中每个节点都必须大于等于(或者小于等于)其左右子节点的值;对于每个节点的值都大于等于子树中每个节点值的堆,叫做“大顶堆”。对于每个节点的值都小于等于子树中每个节点值的堆,叫做“小顶堆”。如何实现一个“堆”如何存储一个堆完全二叉树比较适合用数组来存储。用数组来存储完全二叉树是非常节省存储空间的。因为不需要存储左右子节点的指针,单纯地通过数组的下标,就可以找到一个节点的左右子节原创 2021-05-09 12:01:13 · 169 阅读 · 2 评论 -
27 | 递归树:如何借助树来求解递归算法的时间复杂度?
目的借助递归树来分析递归算法的时间复杂度递归树递归的思想就是将大问题分解为小问题来求解,然后再将小问题分解为小小问题。这样一层一层地分解,直到问题的数据规模被分解得足够小,不用继续递归分解为止。如果我们把这个一层一层的分解过程画成图就是一棵树——递归树。举例一棵斐波那契数列的递归树。节点里的数字表示数据的规模,一个节点的求解可以分解为左右子节点两个问题的求解。如何用递归树来求时间复杂度以归并排序为例,通过递归树来进行时间复杂度分析。归并排序的递归树示意图:每一层排序时间消原创 2021-05-05 18:05:59 · 1855 阅读 · 0 评论 -
26 | 红黑树(下):掌握这些技巧,你也可以实现一个红黑树
红黑树的实现,对于基础不太好的同学理解起来困难(说的就是我——劝退)。学习红黑树的代码实现,对平时做项目开发基本没有太大帮助。对于绝大部分开发工程师来说,这辈子可能都用不着亲手写一个红黑树。对于我而言,有的放矢去学习。把平时要用的、基础的东西都搞会了,如果有余力再来深入地研究这节内容。补充:一棵合格的红黑树需要满足这样几个要求:根节点是黑色的; 每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据; 任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的;原创 2021-04-20 15:59:52 · 106 阅读 · 0 评论 -
25 | 红黑树(上):为什么工程中都用红黑树这种二叉树?
问题引入二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于 log2n 的情况,从而导致各个操作的效率下降。极端情况下,二叉树会退化为链表,时间复杂度会退化到 O(n)。要解决这个复杂度退化的问题,需要设计一种平衡二叉查找树。在工程中,很多用到平衡二叉查找树的地方都会用红黑树。为什么工程中都喜欢用红黑树,而不是其他平衡二叉查找树呢?什么是“平衡二叉查找树”?平衡二叉树的严格定义是这样的:二叉树中任意一个节点的左右子树的高度相差不能大于 1。从这个定义来看,上一节我们讲的完全二叉树、满二叉原创 2021-04-19 20:30:27 · 480 阅读 · 1 评论 -
24 | 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?
这节学习一种特殊的二叉树—二叉查找树。它最大的特点是支持动态数据集合的快速插入、删除、查找操作。但是散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂度是 O(1)。问题引入既然有高效的散列表,二叉树的地方是不是都可以替换成散列表呢?哪些地方是散列表做不了,必须要用二叉树来做?二叉查找树(Binary Search Tree)是二叉树中最常用的一种类型,也叫二叉搜索树。它不仅支持快速查找一个数据,还支持快速插入、删除一个数据。二叉查找树要求在树中的任意一个节点,其左子树中原创 2021-04-19 20:08:11 · 131 阅读 · 0 评论 -
23 | 二叉树基础(上):什么样的二叉树适合用数组来存储?
思考题二叉树有哪几种存储方式?什么样的二叉树适合用数组来存储?树(Tree)根节点:没有父节点的节点 叶子节点或者叶节点:没有子节点的节点叫做树的高度、深度、层:举例说明:生活中,“高度”这个概念,其实就是从下往上度量,比如我们要度量第 10 层楼的高度、第 13 层楼的高度,起点都是地面。所以,树这种数据结构的高度也是一样,从最底层开始计数,并且计数的起点是 0。 “深度”这个概念在生活中是从上往下度量的,比如水中鱼的深度,是从水平面开始度量的。所以,树这种数据结构的深度原创 2021-04-16 23:45:04 · 351 阅读 · 0 评论 -
22 | 哈希算法(下):哈希算法在分布式系统中有哪些应用?
本节分析哈希算法的其他三个应用:负载均衡、数据分片、分布式存储。这三个应用都跟分布式系统有关。看下哈希算法是如何解决这些分布式问题的。五:负载均衡问题:那如何才能实现一个会话粘滞(session sticky)的负载均衡算法呢?也就是说,我们需要在同一个客户端上,在一次会话中的所有请求都路由到同一个服务器上。方法一:维护一张映射关系表,这张表的内容是客户端 IP 地址或者会话 ID 与服务器编号的映射关系。缺点:如果客户端很多,映射表可能会很大,比较浪费内存空间;客户端下线、上线,服务器扩容原创 2021-04-12 23:43:14 · 100 阅读 · 0 评论 -
21 | 哈希算法(上):如何防止数据库中的用户信息被脱库?
问题:对于用户信息中的密码,你会如何存储用户密码?仅仅 MD5 加密一下存储就够了吗?——哈希算法什么是哈希算法哈希算法的定义和原理:将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。哈希算法必须满足的几点要求:从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法); 对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大不相同; 散列冲突的概率要很小,对于不同的原始数据,哈希值相同原创 2021-04-11 17:52:36 · 237 阅读 · 0 评论 -
20 | 散列表(下):为什么散列表和链表经常会一起使用?
有两种数据结构,散列表和链表经常会被放在一起使用。常见的使用方式有:用链表来实现 LRU 缓存淘汰算法,链表实现的 LRU 缓存淘汰算法的时间复杂度是 O(n),通过散列表可以将这个时间复杂度降低到 O(1)。 Redis 的有序集合是使用跳表来实现的,跳表可以看作一种改进版的链表。当Redis 有序集合不仅使用了跳表,还用到了散列表。 Java中的LinkedHashMap 容器也用到了散列表和链表问题一:散列表和链表都是如何组合起来使用的?问题二:为什么散列表和链表会经常放到一块使用?原创 2021-04-09 19:18:30 · 142 阅读 · 0 评论 -
19 | 散列表(中):如何打造一个工业级水平的散列表?
19 | 散列表(中):如何打造一个工业级水平的散列表?如何实现一个工业级的散列表?设计一个合适的散列函数; 定义装载因子阈值,并且设计动态扩容策略; 选择合适的散列冲突解决方法。对于动态散列表来说,不管我们如何设计散列函数,选择什么样的散列冲突解决方法。随着数据的不断增加,散列表总会出现装载因子过高的情况。这个时候,我们就需要启动动态扩容。散列表碰撞攻击原理:如果精心构造数据,使得所有的数据经过散列函数之后,都散列到同一个槽里。当使用的是基于链表的冲突解...原创 2021-04-08 19:56:31 · 83 阅读 · 0 评论 -
18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?
问题引入在 Word 里输入一个错误的英文单词,它就会用标红的方式提示“拼写错误”,Word 文本编辑器的拼写检查功能是如何实现的呢?散列表(Hash Table)散列表散列表定义:散列表的英文叫“Hash Table”,也称为 “哈希表”或者“Hash 表”。散列表用的是数组支持按照下标随机访问数据的特性,散列表其实就是数组的一种扩展,由数组演化而来。数组是散列表的基础。散列思想场景:假如有 89 名选手参加学校运动会。为了方便记录成绩,每个选手胸前都会贴上自己的参赛号码。这 89 名原创 2021-04-07 19:01:37 · 268 阅读 · 0 评论 -
17 | 跳表:为什么Redis一定要用跳表来实现有序集合?
问题:如果数据存储在链表中,就真的没法用二分查找算法了吗?可以对链表进行“改造”,就可以支持类似“二分”的查找算法。跳表定义:对链表经过改造之后的数据结构叫做跳表(Skip list),是一种各方面性能都比较优秀的动态数据结构,特点:可以支持快速地插入、删除、查找操作,甚至可以替代红黑树(Red-black tree)。 Redis 中的有序集合(Sorted Set)就是用跳表来实现的。类似的红黑树也可以实现快速地插入、删除和查找操作如何理解跳表?1、原始的链表:查找效率很低,时间原创 2021-04-06 20:01:53 · 250 阅读 · 2 评论 -
16 | 二分查找(下):如何快速定位IP对应的省份地址?
问题:假设我们有 12 万条这样的 IP 区间与归属地的对应关系,如何快速定位出一个 IP 地址的归属地呢?二分查找的变形问题:变体一:查找第一个值等于给定值的元素public int bsearch(int[] a, int n, int value) { int low = 0; int high = n - 1; while (low <= high) { int mid = low + ((high - low) >> 1); if原创 2021-04-05 11:34:16 · 215 阅读 · 0 评论 -
15 | 二分查找(上):如何用最省内存的方式实现快速查找功能?
思考题:假设有 1000 万个整数数据,每个数据占 8 个字节,如何设计数据结构和算法,快速判断某个整数是否出现在这 1000 万数据中?希望不要占用太多的内存空间,最多不要超过 100MB二分思想查找算法 特点 二分查找 1、二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 2、时间复杂度O(logn)的 查找速度 对数时间复杂度在大原创 2021-04-04 10:21:48 · 133 阅读 · 0 评论 -
14 | 排序优化:如何实现一个通用的、高性能的排序函数?
问题:平时的开发中,我们都是直接使用这些现成的函数来实现业务逻辑中的排序功能。这些排序函数是如何实现的吗?底层都利用了哪种排序算法呢?比如 C 语言中 qsort(),C++ STL 中的 sort()、stable_sort(),还有 Java 语言中的 Collections.sort()希望你把思考的过程看得比标准答案更重要如何选择合适的排序算法?线性排序算法的时间复杂度比较低,适用场景比较特殊。所以如果要写一个通用的排序函数,不能选择线性排序算法 如果对小规模数据进行排序,可以选择时间原创 2021-04-03 22:44:59 · 108 阅读 · 0 评论 -
13 | 线性排序:如何根据年龄给100万用户数据排序?
三种时间复杂度是 O(n) 的排序算法:桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。之所以能做到线性的时间复杂度,主要原因是,这三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作。这几种排序算法的学习重点是掌握适用场景桶排序(Bucket sort)核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了如果要原创 2021-03-31 21:10:14 · 281 阅读 · 0 评论 -
12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?
算法对比:算法 时间复杂度 适合场景 冒泡排序、插入排序、选择排序 O(n2) 小规模数据 归并排序、快速排序 O(n) 大规模数据 归并排序和快速排序都用到了分治思想,非常巧妙。我们可以借鉴这个思想,来解决非排序的问题,比如:如何在 O(n) 的时间复杂度内查找一个无序数组中的第 K 大元素? 这就要用到我们今天要讲的内容归并排序使用分治思想:大问题分解为小问题,分而治之,小问题解决了,大问题也就解决了。归并排序的递推公式:递推公式原创 2021-03-28 14:29:26 · 252 阅读 · 0 评论 -
11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?
划重点:特定算法是依赖特定的数据结构的,带着问题去学习,是最有效的学习方法本节分析冒泡排序、插入排序、选择排序三种排序算法问题思考:插入排序和冒泡排序的时间复杂度相同,都是 O(n2),在实际的软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢?我们今天讲的几种排序算法,都是基于数组实现的。如果数据存储在链表中,这三种排序算法还能工作吗?如果能,那相应的时间、空间复杂度又是多少呢?...原创 2021-03-25 19:38:31 · 159 阅读 · 0 评论 -
10 | 递归:如何用三行代码找到“最终推荐人”?
什么是递归?递归是一种应用非常广泛的算法(或者编程技巧)。很多数据结构和算法的编码实现都要用到递归,比如 DFS 深度优先搜索、前中后序二叉树遍历等等。场景周末你带着女朋友去电影院看电影,女朋友问你,咱们现在坐在第几排啊?电影院里面太黑了,看不清,没法数,现在你怎么办?别忘了你是程序员,这个可难不倒你,递归就开始排上用场了。于是你就问前面一排的人他是第几排,你想只要在他的数字上加一,就知道自己在哪一排了。但是,前面的人也看不清啊,所以他也问他前面的人。就这样一排一排往前问,直到问到第一排的人,说原创 2021-03-22 23:09:00 · 125 阅读 · 0 评论 -
09 | 队列:队列在线程池等有限资源池中的应用
队列定义先进者先出,这就是典型的“队列”。队列跟栈一样,也是一种操作受限的线性表数据结构。顺序队列和链式队列顺序队列:用数组实现的队列// 用数组实现的队列public class ArrayQueue { // 数组:items,数组大小:n private String[] items; private int n = 0; // head表示队头下标,tail表示队尾下标 private int head = 0; private int tail = 0;原创 2021-03-21 23:13:32 · 108 阅读 · 2 评论 -
08 | 栈:如何实现浏览器的前进和后退功能?
栈后进者先出,先进者后出,这就是典型的“栈”结构。栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。为什么要使用到“栈”这种操作受限的数据结构?事实上,从功能上来说,数组或链表确实可以替代栈,但你要知道,特定的数据结构是对特定场景的抽象,而且,数组或链表暴露了太多的操作接口,操作上的确灵活自由,但使用时就比较不可控,自然也就更容易出错。当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,这时我们就应该首选“栈”这种数据结构。如何实现一个栈?栈既可以用数原创 2021-03-21 20:18:58 · 152 阅读 · 0 评论 -
07 | 链表(下):如何轻松写出正确的链表代码?
目录技巧一:理解指针或者引用的含义技巧二:警惕指针丢失和内存泄漏技巧三:利用哨兵简化实现难度技巧四:重点留意边界条件处理技巧五:举例画图,辅助思考技巧六:多写多练,没有捷径写链表代码是最考验逻辑思维能力的。因为,链表代码到处都是指针的操作、边界条件的处理,稍有不慎就容易产生 Bug。链表代码写得好坏,可以看出一个人写代码是否够细心,考虑问题是否全面,思维是否缜密。所以,这也是很多面试官喜欢让人手写链表代码的原因自己有决心并且付出精力是成功的先决条件,除此之外,我们还需要一些方原创 2021-03-17 22:55:31 · 137 阅读 · 2 评论 -
06 | 链表(上):如何实现LRU缓存淘汰算法?
缓存作用缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的 CPU 缓存、数据库缓存、浏览器缓存等等。淘汰策略常见的策略有三种:先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Frequently Used)、最近最少使用策略 LRU(Least Recently Used)。链表不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。三种最常见的链表结构,它们分别是:单链表、双向原创 2021-03-16 21:16:56 · 149 阅读 · 2 评论 -
LeetCode训练
缺失的正整数 /** * 0~n-1中缺失的数字 */public class MissingNum { public int missingNumber(int[] nums) { int i = 0; int j = nums.length - 1; while (i < j) { int m = i + ((j - i) >> 2); if (nums[m] == m)原创 2021-03-14 18:35:11 · 132 阅读 · 0 评论 -
05 | 数组:为什么很多编程语言中数组都从0开始编号?
什么是数组?数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。线性表存储结构 连续内存空间 存储相同类型数据优点:连续内存+相同类型数据=数组可以实现随机访问缺点:数组中删除、插入一个数据,为了保证连续性,就需要做大量的数据搬移工作。数组如何实现根据下标随机访问数组元素?数组寻址公式a[i]_address = base_address + i * data_type_sizedata_type_size 表示数组中每个元素的原创 2021-03-14 16:25:16 · 189 阅读 · 0 评论 -
04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
// n表示数组array的长度int find(int[] array, int n, int x) { int i = 0; int pos = -1; for (; i < n; ++i) { if (array[i] == x) { pos = i; break; } } return pos;}这段代码的时间复杂度还是 O(n) 吗?如果数组中第一个元素正好是要查找的变量 x,那就不需要继续遍历剩下的 n-1 个数据..原创 2021-03-10 20:51:58 · 129 阅读 · 0 评论 -
03|复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
目录为什么需要复杂度分析?大 O 复杂度表示法时间复杂度分析几种常见时间复杂度空间复杂度分析为什么需要复杂度分析?事后统计法:代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。这种统计方法有非常大的局限性。测试结果非常依赖测试环境 测试结果受数据规模的影响很大因此,我们需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法。大 O 复杂度表示法T(n)表示算法的执行时间,n表示数据规模的大小,f(n)表示每行代码执.原创 2021-03-09 23:40:27 · 114 阅读 · 0 评论 -
重学算法第三期|数据结构与算法001
1、开篇词在技术圈里,我们经常喜欢谈论高大上的架构,比如高可用、微服务、服务治理等等。鲜有人关注代码层面的编程能力,而愿意沉下心来,花几个月时间啃一啃计算机基础知识、认认真真夯实基础的人,简直就是凤毛麟角。人生路上,我们会遇到很多的坎。跨过去,你就可以成长,跨不过去就是困难和停滞。而在后面很长的一段时间里,你都需要为这个困难买单。对于我们技术人来说,更是这样。既然数据结构和算法这个坎,我们总归是要跨过去,为什么不是现在呢?2、为什么要学习数据结构与算法我们学任何知识都是为了“用”的,是为了解原创 2021-03-09 22:45:40 · 107 阅读 · 0 评论 -
贪心算法
有人说贪心算法是最简单的算法,原因很简单:你我其实都很贪,根本不用学就知道怎么贪。有人说贪心算法是最复杂的算法,原因也很简单:这世上会贪的人太多了,那轮到你我的份?转载 2017-06-11 21:18:47 · 489 阅读 · 0 评论 -
Java反转单链表(code)
转载自:http://poly.iteye.com/blog/1748272主要是面试中可能会经常碰上该类似操作,尤其是稍大点公司,面试官可能并不在乎你能不能搞定该题,但是这类型题目最是能体现程序员的思维状态 ---一个迷糊头脑的程序员 怎能立志改变这个世界。/** * @author luochengcheng * 定义一个单链表 */class Node { //变量 priv转载 2016-07-19 14:05:30 · 364 阅读 · 0 评论 -
n个数里找出前m个数(或者 从10亿个浮点数中找出最大的1万个)
转载自:http://blog.csdn.net/winsunxu/article/details/6219376点击打开链接引子每年十一月各大IT公司都不约而同、争后恐后地到各大高校进行全国巡回招聘。与此同时,网上也开始出现大量笔试面试题;网上流传的题目往往都很精巧,既能让考查基础知识,又在平淡中隐含了广阔的天地供优秀学生驰骋。这两天在网上淘到一1道笔试题目(注1),虽然转载 2016-06-19 20:22:48 · 2944 阅读 · 0 评论 -
TreeMap的讲解
本文转载自:http://blog.csdn.net/chenssy/article/details/26668941点击打开链接 原文出自:http://cmsblogs.com/?p=1013。尊重作者的成果,转载请注明出处! 个人站点:http://cmsblogs.com---------------------------------转载 2016-06-19 17:59:32 · 2294 阅读 · 0 评论 -
树状数组
昨天学了一下树状数组,随笔都写了一大半,结果一个不小心就把他给删了,哎。。。。。。今天就当是复习吧!再写一次。如果给定一个数组,要你求里面所有数的和,一般都会想到累加。但是当那个数组很大的时候,累加就显得太耗时了,时间复杂度为O(n),并且采用累加的方法还有一个局限,那就是,当修改掉数组中的元素后,仍然要你求数组中某段元素的和,就显得麻烦了。所以我们就要用到树状数组,他的时间复杂度为O(lgn),转载 2016-06-12 18:20:10 · 286 阅读 · 0 评论 -
筛选法求1到100以内的素数
问题描述:所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。具体做法如下: 先将1挖掉(因为1不是素数)。 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。 用3去除它后面的各数,把3原创 2016-01-18 21:20:42 · 2901 阅读 · 0 评论 -
递归实现数组元素组合
import java.util.*;import java.io.*;@SuppressWarnings("unchecked")public class Test{ public static void main(String[] args) throws Exception { String[] array = new String[]{"1","2","3","4"};原创 2016-01-18 21:05:06 · 736 阅读 · 0 评论