算法
文章平均质量分 64
zuimei_forver
这个作者很懒,什么都没留下…
展开
-
顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路 顺时针打印一个矩阵,假设该矩阵左上角为(r_s,c_s),右下角为(r_e,c_e)。分五种情况讨论:原创 2015-10-22 20:22:16 · 330 阅读 · 0 评论 -
常用排序算法
常用排序算法有:冒泡排序、直接插入排序、选择排序、快速排序、归并排序和堆排序。下面给出部分算法的源码: 冒泡排序/** * 冒泡排序 * 时间复杂度 最坏O(n^2) 最好O(n) 平均o(n^2) 稳定 * @param array * @return */public static int[] bubbleSort(int[] array) { int len = ar原创 2016-08-08 17:38:33 · 272 阅读 · 0 评论 -
Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters.Examples:Given “abcabcbb”, the answer is “abc”, which the length is 3.Given “bbbbb”, the answer is “b”, with the le原创 2016-08-13 16:06:09 · 170 阅读 · 0 评论 -
Combination Sum
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. The same repeated number may be chosen from C unlimited number of原创 2016-08-13 15:12:50 · 228 阅读 · 0 评论 -
整数划分
整数划分指把一个正整数n写成多个大于等于1且小于等于其本身的整数的和,则其中各加数所构成的集合为n的一个划分。这里我们记n的m划分的个数为f(n,m)。 例如,当n=4时,有5个划分,即 {4},{3+1},{2,2},{2,1,1},{1,1,1,1} 注意: {3,1} 和{1,3} 被认为是同一个划分。 根据n和m的关系,考虑一下几种情况: (一)当n=1 时,无论m的值为多少 ,只原创 2016-08-12 20:53:37 · 440 阅读 · 0 评论 -
求一个数组中最小的K个数
面试的时候,面试官问了这道题“求一个数组中最小的k个数”,我当时只给出了两种解法:1. 首先使用排序,然后选择前k个值返回。这种算法最好的时间复杂度是O(nlogn),取决于所选择的排序算法2.初始化一个k个元素的数组a,首先将数组中前k个元素放入a中,然后从K+1到最后一个元素进行如下判断:如果当前元素大于a中最大元素,继续向后遍历;如果当前元素小于a中最大元素,则替换a中最大元素...原创 2016-01-13 19:50:24 · 846 阅读 · 0 评论 -
与二进制中1的位数有关题目
判断一个整数是否为2的整数次方题目:用一条语句判断一个整数是不是2的整数次方。 解题思路:一个整数如果是2的整数次方,那么它的二进制表示中有且只有一位是1,而其它所有位都是0。可以将这个整数减去1之后再和它自己做与运算,如果结果为0,表示该整数只有一位1,是2的整数次方;如果结果不为0,表示该整数不是2的整数次方。 function expOf2($num){ //返回1,表原创 2016-01-26 10:49:09 · 345 阅读 · 0 评论 -
二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如:把9表示成二进制1001,有2位是1。因此,如果输入9,该函数输出2。解法1:以9为例,9的二进制表示为1001,可将9与1进行与运算即1001&0001,得到结果为1,表示末尾为1。然后,将1001右移一位,得到0100,在与0001与运算,得到0,表示末尾为0。最终过程为:将输入数与1进行与运算,如果结果为1,则该数的原创 2016-01-26 10:06:31 · 319 阅读 · 0 评论 -
两个栈实现队列
用两个栈实现队列,可以选择一个栈存储数据,用另外一个栈作为中转。如:栈A存储数据,栈B作为中转。向队列添加数据,即向栈A压入数据;从队列删除数据,首先将栈A所有数据逐一弹出,然后压入栈B中,当栈A为空时,栈B中栈顶元素即为队列的头部(最新进入队列的元素),直接从栈B弹出,最后再将栈B中所有数据弹出、压入栈A。这种方法的缺点在于:每次移除队首时,都要将数据从栈A移到栈B,然后再将数据移回栈A,这原创 2016-01-15 22:50:16 · 387 阅读 · 0 评论 -
旋转数组中的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。解题思路查找一个数组中最小值,直接遍历当然是最简单的方式,但是时间复杂度为O(n);首先分析旋转数组的特点,假设旋转数组的前半部分为H,后半部分为T,则T中元素一定小原创 2015-10-26 20:51:33 · 360 阅读 · 0 评论