算法
文章平均质量分 69
安徽小亚哥哥
这个作者很懒,什么都没留下…
展开
-
递归算法问题:本来sorted int array,随机选了一个pivot,rotate了一下 ,设计一个算法快速找到给定的数字,返回所在的index
//评测题目: // 本来是排序好的数组,随机选了一个pivot,rotate了一下 // 举例:// pivot=8时:1 2 4 6 8 10 13 17 -> 8 10 13 17 1 2 4 6// pivot=4时:1 2 4 6 8 10 13 17 -> 4 6 8 10 13 17 1 2 // 设计一个算法快速找到给定的数字,返回所在的index分析:rotate...原创 2018-05-28 11:46:43 · 236 阅读 · 0 评论 -
【高并发解决方案】5、如何设计一个秒杀系统
什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购。秒杀系统场景特点秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增。 秒杀一般是访问请求数量远远大于库存数量,只有...转载 2018-07-28 14:37:33 · 459 阅读 · 0 评论 -
秒杀系统:并发队列 接口设计 并发请求数据安全处理
并发队列的选择Java的并发包提供了三个常用的并发队列实现,分别是:ArrayBlockingQueue、ConcurrentLinkedQueue 和 LinkedBlockingQueue 。 ArrayBlockingQueue是初始容量固定的阻塞队列,我们可以用来作为数据库模块成功竞拍的队列,比如有10个商品,那么我们就设定一个10大小的数组队列。ConcurrentLin...转载 2018-07-28 14:30:19 · 372 阅读 · 0 评论 -
生成窗口最大值数组 双端队列典型问题
题目:有一个整形数组arr和一个大小为window的窗口从数组的最左边滑到最右边,窗口每次向右边,窗口每次向右边滑一个位置。例如,数组为[4,3,5,4,3,3,6,7],窗口大小window=3时;1) [4 3 5] 4 3 3 6 7 窗口最大值为52) 4 [3 5 4] 3 3 6 7 窗口最大值为53) 4 3 [5 4 3] 3 6 7 窗口最大值为54) ...原创 2018-07-06 11:55:59 · 358 阅读 · 0 评论 -
袋鼠过河
题目描述一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米,如果为0,就会陷进去无法继续跳跃。河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了,给定每个弹簧的力量,求袋鼠最少需要多少跳能够到达对...原创 2018-06-27 23:19:38 · 211 阅读 · 0 评论 -
数串
题目描述设有n个正整数,将他们连接成一排,组成一个最大的多位整数。如:n=3时,3个整数13,312,343,连成的最大整数为34331213。如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。输入描述:有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。输出描述:每组数据输出一个表示最大的整...原创 2018-06-26 13:26:00 · 138 阅读 · 0 评论 -
【BST】把搜索二叉树转化成双链表
题目:EPI提示:用递归方式求解,思路比较简单清晰!//双链表的节点和二叉树节点类似,left当做前继节点prev,right当做后继节点nexttypedef shared_ptr<treenode> pnode; //返回值是pair类型,first是双链表第一个节点,second是双链表最后一个节点pair<pnode, pnode> covert_BST_to_do...转载 2018-06-30 21:44:46 · 276 阅读 · 0 评论 -
幸运的袋子
题目描述一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下...原创 2018-06-26 08:55:53 · 180 阅读 · 0 评论 -
leetcode 342. 4的幂
给定一个整数 (32位有符整数型),请写出一个函数来检验它是否是4的幂。示例:当 num = 16 时 ,返回 true 。 当 num = 5时,返回 false。问题进阶:你能不使用循环/递归来解决这个问题吗?回忆,判断一个数是否是2的幂,假如一个数是2的幂,那么num&num-1==0现在判断一个数是否是4的幂,需要奇数位为1,例如010000和0000100,因此首先判断是否是2的...原创 2018-05-31 23:23:51 · 412 阅读 · 0 评论 -
二叉树建立 二叉树遍历 二叉树 递归 非递归 先序 中序 后序 层序遍历
二叉树递归创建:本质上和二叉树递归遍历一样,但是当需要知道何时节点孩子为空,因此这里用#做分隔符。先序建立:先给当前节点分配数据,然后创建左子树,然后创建又子树。 public Node createTree(){//递归先序创建树 if(index >= input.length){ return null; } if(input[index]=='#'){ ind...原创 2018-05-31 22:04:22 · 479 阅读 · 0 评论 -
leetcode 322.零钱兑换
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你可以认为每种硬币...原创 2018-05-31 09:22:54 · 970 阅读 · 0 评论 -
生成数组的全排列
举个例子,【1,2,3,4,5,6,7,8,9】要生成全排列,全排列用树枚举肯定是以1开头,以2开头···以9开头的所有全排列的集合的并集,只需要将第一个数字1和第1~第9个数字交换,这样第一个元素定下来了(以1开头,以2开头···以9开头),后面的子数组也是求全排列,可以递归解决。给定一个数组,要生成全排列,可以这样想。在某个位置上,所有数组的元素都可能存当前在位置。从前往后,只需要将当前数组位...原创 2018-06-20 22:18:25 · 581 阅读 · 0 评论 -
网易 合唱团 n个学生站成一排,每个学生有一个能力值 牛牛想从n个学生中选出k名学生 要求相邻学生编号不超过d使得这k个学生乘积最大
题目描述有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?输入描述:每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值...原创 2018-06-05 23:07:11 · 2618 阅读 · 0 评论 -
求解二叉树中两个结点的最低公共父结点
一,问题描述构建一棵二叉树(不一定是二叉查找树),求出该二叉树中某两个结点的最低公共父结点。借用一张图如下:结点8 和 结点5 的最低公共父结点为 结点2 二,二叉树的构建与 求二叉树中第K层结点的个数 文章中的第二点:二叉树构建相同 三,求解最低公共父结点的算法实现有两种思路,一种是通过中序遍历和后序遍历。由于中序遍历是先左子树中的结点,再访问根,再访问右子树...转载 2018-08-04 21:36:02 · 236 阅读 · 0 评论