![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithms
Mlib
这个作者很懒,什么都没留下…
展开
-
如何生成100个1-100以内的不重复的随机数
这是个经典的面试题目:生成长度为100的数组,插入1-100以内的但均不重复的随机数一、简单实现思路:(1) 把N个数放入Hashtable 或者arrayList 中.(2) 从上面的集合中随机抽取一个数放入int数组中.(3) 把取出的这个数从上面的集合中删除.(4) 循环 (2),(3) 步骤,直到int数组取满为止.这是一种比较简单的实现思路,实现代码如下:import java.util原创 2016-01-22 23:52:53 · 25775 阅读 · 1 评论 -
【算法】字符串循环移位后是否包含
问题 给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。 例如,s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。解法一最直接最笨的方法就对s1进行循环移动,再进行字符串包含的判断,从而遍历其所有的可能性。字符串循环移动,时间复杂度为O(n),字符串包含判断,采用普通的方法,时间复杂度为O原创 2017-12-31 15:35:06 · 1796 阅读 · 2 评论 -
【算法】如何判断链表有环
如何判断单链表是否存在环 有一个单向链表,链表当中有可能出现“环”,就像题图这样。如何用程序判断出这个链表是有环链表? 不允许修改链表结构。 时间复杂度O(n),空间复杂度O(1)。 方法一、穷举遍历方法一:首先从头节点开始,依次遍历单链表的每一个节点。每遍历到一个新节点,就从头节点重新遍历新节点之前的所有节点,用新节点ID和此节点之前所有节点ID依次作比较。如果发现新原创 2017-12-25 20:05:59 · 80510 阅读 · 23 评论 -
八大排序算法总结与java实现
原文链接: 八大排序算法总结与java实现 - iTimeTraveler概述因为健忘,加上对各种排序算法理解不深刻,过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总结,强行学习。首先罗列一下常见的十大排序算法:直接插入排序希尔排序简单选择排序堆排序冒泡排序快速排序归并排序基数排序其中我们讨论的这八大排序算法的实现可以参考我的Github:SortAlgori原创 2017-07-30 15:22:36 · 14648 阅读 · 9 评论 -
【算法】10亿int型数,统计只出现一次的数
题目10亿int整型数,以及一台可用内存为1GB的机器,时间复杂度要求O(n),统计只出现一次的数?分析首先分析多大的内存能够表示10亿的数呢?一个int型占4字节,10亿就是40亿字节(很明显就是4GB),也就是如果完全读入内存需要占用4GB,而题目只给1GB内存,显然不可能将所有数据读入内存。我们先不考虑时间复杂度,仅考虑解决问题。那么接下来的思路一般有两种。位图法:用一个bit位来标识一个i原创 2017-07-14 10:10:23 · 13277 阅读 · 0 评论 -
【算法】无序数组中求中位数
问题 给定一个int数组A,为传入的数字序列,同时给定序列大小n,请返回一个int数组,代表每次传入后的中位数。保证n小于等于1000或者 求一个无序数组的中位数。 如:{2,5,4,9,3,6,8,7,1}的中位数为5。 要求:不能使用排序,时间复杂度O(n)。分析因为题目指定不能使用排序算法,而且要求时间复杂度O(n),也就是要求一次遍历就得给出结果。所以排序算法基本上没有用武之地。原创 2017-10-05 11:23:31 · 10141 阅读 · 4 评论 -
各种排序算法时间复杂度和空间复杂度表
各种排序算法时间复杂度和空间复杂度表: 比较时间复杂度函数的情况如下图: 对n较大的排序记录。一般的选择都是时间复杂度为O(nlog2n)的排序方法: 接下来博主抽时间要整理一下各经典算法思想和心得,敬请期待原创 2015-11-03 16:29:34 · 5566 阅读 · 2 评论 -
【算法】大数乘法问题及其高效算法
题目编写两个任意位数的大数相乘的程序,给出计算结果。比如: 题目描述: 输出两个不超过100位的大整数的乘积。 输入: 输入两个大整数,如1234567 和 123 输出: 输出乘积,如:151851741或者求 1234567891011121314151617181920 * 2019181716151413121110987654321 的乘积结果分析所谓大数相乘(M原创 2017-08-23 11:07:54 · 105556 阅读 · 17 评论 -
【算法】反转字符串
前言研究算法能提高我们的编程功底,更好地编写出高效稳健的代码。今天,我们研究的是 — 反转字符串。//输入一个字符串,输出它的倒序字符串input: Hellooutput: olleH解法反转字符串,确实没什么难度,但是我无意间搜索了一下,才发现这么一个看似简单的反转算法实现起来真可谓花样繁多。这里我们尽可能分别总结介绍一下。1、使用字符数组倒序输出最常规的解法,也是最容易想到的一种方法就是原创 2017-08-06 09:35:39 · 3483 阅读 · 0 评论 -
【算法】如何反转一个单链表?如何两两反转?
如何反转单链表?如何使用较少的遍历次数完成单链表的反转?问题一、反转单链表题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下,这里使用的是Java描述:public class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}思路如何把一个单链表进行原创 2016-02-24 15:03:30 · 4289 阅读 · 0 评论 -
Google 面试题 | 判断字符串是否可由重复子字符串组成
题目描述对于一个非空字符串,判断其是否可由一个子字符串重复多次组成。字符串只包含小写字母且长度不超过10000。样例1 输入: “abab” 输出: True 样例解释: 输入可由”ab”重复两次组成 样例 2 输入: “aba” 输出: False 样例 3 输入: “abcabcabcabc” 输出: True 样例解释:输入可由”a转载 2017-05-05 14:39:29 · 6825 阅读 · 9 评论 -
【面试题】N级台阶(比如100级),每次可走1步或者2步,求总共有多少种走法?
走台阶算法(本质上是斐波那契数列)在面试中常会遇到,描述就如题目那样:总共100级台阶(任意级都行),小明每次可选择走1步、2步或者3步,问走完这100级台阶总共有多少种走法?一、 题目分析这个问题本质上是斐波那契数列,假设只有一个台阶,那么只有一种跳法,那就是一次跳一级,f(1)=1;如果有两个台阶,那么有两种跳法,第一种跳法是一次跳一级,第二种跳法是一次跳两级,f(2)=2。如果有大于2级的n级原创 2016-01-05 15:31:10 · 58368 阅读 · 12 评论 -
如何判断CPU是大端还是小端模式
一、概念及详解在各种体系的计算机中通常采用的字节存储机制主要有两种: Big-Endian和Little-Endian,即大端模式和小端模式。Big-Endian和Little-Endian的定义如下:1) Little-Endian:就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 2) Big-Endian:就是高位字节排放在内存的低地址端,低位字节排放在内存的高原创 2018-01-18 16:59:25 · 14857 阅读 · 0 评论