合集-算法
摘要:1.链表中环相关问题 1.1 链表中是否有环 有一个单向链表,链表中有可能出现“环”,就像下图这样。 那么,如何用程序来判断该链表是否为有环链表呢? 思路 创建两个指针p1和p2(在Java里就是两个对象引用),让它们同时指向这个链表的头节点。然后开始一个大循环,在循环体中,让指针p1每次向后移动1
阅读全文
摘要:2.最小(大)栈问题 题目 实现一个栈,该栈带有出栈(pop),入栈(push),取最小元素(getMin)3个方法。且要保证这3个方法的时间复杂度都是O(1)。 思路 1.设原有的栈为main栈,此时创建一个额外的min栈,用于辅助main栈。 2.当第1个元素,进main栈时,让该元素,也进入m
阅读全文
摘要:题目 有一个无序整型数组,如何求出该数组排序后的任意两个相邻元素的最大差值?要求时间和空间复杂度尽可能低。 思路 解法1:使用任意一种时间复杂度为O(nlogn)的排序算法(如快速排序),给原数组排序,然后遍历排序号的数组,并对每队相邻元素求差,最终得到最大差值。该解法的时间复杂度是O(nlogn)
阅读全文
摘要:6.用栈模拟队列 题目 用栈来模拟一个队列,要求实现队列的两个基本操作:入队、出队。 思路 用两个栈,一个栈用来存储入队元素,另一个栈用来存储,出队元素。 比如,有两个栈A,B,入队元素,先进入到栈A,每次元素要出队时,就把栈A的元素依次出栈,进入到栈B,再从栈B出栈,来模拟元素出队。 代码 pub
阅读全文
摘要:8.删去k个数字后的最小值 题目 给出一个整数,从该整数中去掉k个数字,要求剩下的数字形成的新整数经可能小。应该如何选取被去掉的数字? 其中整数的长度大于或等于k,给出的整数的大小可以超过long类型的数字范围。 举例:整数1593210,删除3个数字,新整数最小为1210;整数5674201,删除
阅读全文
摘要:9.如何实现大正整数相加 题目 给出两个很大的正整数,要求实现程序求出两个正整数之和。超出Java中的Long类型的范围的正整数,如何求和。 思路 使用到小学的数学了,对于大的数,小学老师会教,列竖式进行计算。 对于,计算机,无法计算太大的数,进行加运算。我们可以将大的数,转成一个个小的整数,创建两
阅读全文
摘要:10.金矿问题 题目 有5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人人数也不同。例如有的金矿储量是500kg黄金,需要5个工人来挖掘,有的金矿储量是200kg黄金,需要3个工人来挖掘...... 如果参与挖矿的工人的总数是10。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半的金矿。要求计
阅读全文
摘要:11.寻找缺失的整数 题目 在一个无序数组里有99个不重复的正整数,范围是1100,唯独缺少一个1100的整数。然后找出这个缺失的整数。 思路 1.对无序数组,进行升序排序,先判断首位是否为2或99,如果是则得到缺失值,否则,不连续的两个元素中间即为,缺失值。时间复杂度,为排序算法的时间复杂度,空间
阅读全文
摘要:题目 关于用户标签的需求:用户标签包括用户的社会属性、生活习惯、消费行为等信息。例如,程序员,有驾照,单身等等。通过用户标签,可以对多样的用户群体进行统计。例如,统计用户的男女比例,统计喜欢旅游的用户数量等。 通常的思路,是使用关系型数据库,比如Occupation表示用户职位,gender表示性别
阅读全文
摘要:13.LRU算法的应用 题目 关于用户信息的需求 假定在一个复杂的系统中,需要抽象出一个用户系统,提供给其他子系统使用,该如何实现。子系统对用户信息的查询频率很高,要注意性能问题。 用户信息是存储在数据库里的,但是对于查询频率高的数据,不能每一次请求时都去查询数据库。 思路 哈希表 使用以用户id为
阅读全文
摘要:14.A星寻路算法 题目 迷宫寻路需求,在一个迷宫游戏中,有一些怪物攻击主角,现在希望小怪物,能自动绕过迷宫中的障碍物,寻找到主角的所在。 思路 A星寻路算法(A*search algorithm),是一种用于寻找有效路径的算法。 简单的场景举例(简化问题),看一看A星寻路算法的工作过程。 小怪物从
阅读全文
摘要:5.红包算法 题目 一个关于钱的需求。 发红包功能,例如一个人的群里发了100红包,群里有10个人一起来抢红包,每个人的金额随机分配。 抢红包规则 所有人抢到的金额之和要等于红包金额。 抢到红包的人至少抢到1分钱。 尽可能保证红包拆分的金额分布均衡,不要出现两极分化太严重的情况。 思路 二倍均值法
阅读全文