算法
文章平均质量分 51
海鲜小王子
记录点滴,SHU,小硕,EE
展开
-
leetcode之全排列问题(Permutations)
在leetcode上,跟Permutations有关的题目:31 Next Permutation46 Permutations一.31 Next Permutation 31题是排列的入门题,给出[1,2,3,4],需给出下一排列[1,2,4,3]。这题有固定的解法,给定排序nums[n]=[1,4,2,7,6,5,3],n=0~6:从序号6开始往前寻找第一对原创 2016-10-10 16:26:33 · 514 阅读 · 0 评论 -
二叉树中两个节点的第一个祖先父节点
分三种情况 1. 非二叉查找树,树root节点未知,节点包含父节点信息 2. 非二叉查找树,树root节点已知,节点不包含父节点信息 3. 二叉查找树,树root节点已知,节点不包含父节点信息【Reference】 http://blog.csdn.net/hackbuteer1/article/details/8022138原创 2017-04-24 22:21:39 · 453 阅读 · 0 评论 -
快速排序
快速排序是由C.A.R Hoare在1960年发明的,并被选为20世纪十大算法。在不要求稳定的应用场景中,快速排序是一种性能不错的、通用的排序算法。 在阅读完Robert Sedgewick的《算法》之后,尝试把几种快速排序整理在一起并总结。快速排序的精髓在于切分位置(Partition)的选取,本文希望把重点放在几种切分的区别上,淡化快速排序的原理和概念。本文所有源码来源于[1],都是从小原创 2016-07-04 16:15:08 · 5229 阅读 · 0 评论 -
可变参数函数——以printf为例子
一. 调用形式void foo(int argv1, char argv2, …) 在参数表的末尾给出省略号,表明这个函数的参数是可变的二. 工作原理进程在调用函数时,会将函数参数压入用户栈,压入的顺序是从参数表右端开始,从右至左的压栈顺序支持了可变参数的实现。左边的参数在低地址,右边的参数在高地址。进入函数后,以左边的参数为线索,可透过指针依次访问右边省略掉的参数。 可变参数原创 2016-12-18 23:34:36 · 983 阅读 · 0 评论 -
求单链表是否有环、环长、入环点、链长
1. 单链表是否有环用两个快慢指针去判断单链表是否环,快指针的速度是慢指针的两倍,若单链表有环,则两个指针会先后进入环内,并且快指针会从后面追上慢指针。下面来严谨地分析一下两个指针在环内相遇的情况。 假设此时慢指针s和快指针f都在环内,相隔k点,环内共有R点,t时间之后,两指针相遇。[快指针最终位置 = 慢指针最终位置] -> [(2t mod R) + k = (t mod R)] 假原创 2016-12-18 23:32:44 · 1225 阅读 · 0 评论 -
120.Triangle
[ [2], [3,4], [6,5,7], [4,1,8,3]]一、空间复杂度O(n^2) 一共有n行,那么所占空间为n*(n+1)/2的一维数组,从上往下填表,由于下一个值的得出需要上一个值,所以从上往下填表需要设置两个临时变量进行倒换,比较麻烦;且从上往下填表的最终结果需要在最底行中找最小值。二、空间复杂度O(n) 填表是一个双重循环,在内循原创 2016-10-10 16:30:45 · 237 阅读 · 0 评论 -
全子集问题(subset)
全子集问题的三种解法:1.回溯法 回溯是经典的解法,有固定的模板,用递归实现。class Solution {public: vectorvectorint>> subsets(vectorint>& nums) { sort(nums.begin(), nums.end()); vectorvectorint>> subs; v原创 2016-10-10 16:30:23 · 2042 阅读 · 0 评论 -
二分搜索
//非递减数列,[left, right] 闭区间,最后left一定会等于rightwhile(left //区间只剩1个元素时终止,此时left=right int mid = left + ((right - left) >> 1);//防止溢出,没有+1,mid偏左 if(target > nums[mid]) { left = mid + 1;//因为mi原创 2016-10-10 16:29:58 · 225 阅读 · 0 评论 -
leetcode之图像旋转(Rotate Image)
新建一个数组,将原数组的数据按规律复制到新数组,这种方法做不到in-place,占用了额外一个数组的空间newx = y;newy = n-1-x;我们可以按ring by ring的顺序进行操作将上下的行进行反转,然后按主对角线进行对称交换;这这种方法也很容易做到逆时针旋转。/* * clockwise rotate * first reverse up to do原创 2016-10-10 16:29:24 · 1091 阅读 · 0 评论 -
leetcode之组合数(Combination Sum)
Combination Sum//代码1public class Solution { public ListList> combinationSum(int[] candidates, int target) { ListList> result = new ArrayListList>(); if(candidates.length == 0 ||原创 2016-10-10 16:29:03 · 265 阅读 · 0 评论 -
N皇后问题
这题是回溯法的经典例题,在剪枝的判断中,需要判断3个条件:每列是否冲突45°对角线是否冲突135°对角线是否冲突 对于第1个条件,可以很容易想到用数组查询;但对于第2和第3个条件,我原来是用for循环检查的,后来发现更优的解法:也可以用数组查询法,这样这三个条件就可以统一起来了。原创 2016-10-10 16:28:40 · 234 阅读 · 0 评论 -
QPS
题目有一个消息队列集群,集群里每台Broker的响应时间RT都不一样,但是每台Broker的极限服务QPS都是一样的,超过这个QPS会出现过载雪崩。而消息的生产者客户端,每次发送都会选择其中的一台broker来发送,一般来说发送逻辑是运行在一个线程池里面。假设cpu资源充足,通过实现一个负载均衡算法,使得生产者能够达到最大吞吐量,最优的平均响应时间,但是又不能把任何一台服务器压垮。已知每个br原创 2017-04-24 22:22:47 · 2020 阅读 · 0 评论