算法
疯一样的雨
在最糟糕的日子里遇到了最幸运的人!
展开
-
在二维数组中查找数
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个 函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。解析:题目并不是很难,最简单的方法就是遍历数组,找出该数是否在数组中。但是有更简便的方法: 首先选取数组右上角的数字,如果该数字就是要找的数字,则说明该数字在数组中,结束。 如果该数字大于要查找的数字原创 2015-11-03 21:15:51 · 440 阅读 · 0 评论 -
LeetCode-MajorityElement
本例源码下载地址:MajorityElement题目描述:题目大意是给定一个长度为n的数组,找到数组中的众数。并给出众数的定义为:在数组中出现的次数大于n/2的元素。思路:1、题目关键词“出现次数大于n/2”,这里可以联想到之前的题目:找出发贴水王。2、根据次数的关键词,可以从次数入手。假如我们把数组按照出现最多的顺序排列,那么由于出现最多的那个超过了n/2,比如个数为n/2+1吧,我...原创 2019-02-23 16:15:08 · 214 阅读 · 0 评论 -
LeetCode-Search a 2D Matrix II
本例源码下载地址:SearchMatrix题目描述:题目大意是给编写一个高效率的算法来查找一个mxn的二维矩阵数组里面是否存在一个目标数。该矩阵的有2个特点:1、每行的元素从左到右升序排列2、每列的元素从上到下升序排列思路:1、题目中没有说明该数组是不是空的,因此需要对空数组判断。2、简单的遍历二维数组可以找到,算法复杂度为O(mxn),但是并不高效。3、从数组特性来看,每行及...原创 2019-02-27 19:22:31 · 231 阅读 · 0 评论 -
LeetCode-SingleNumber
本例源码下载地址:SingleNum题目描述:题目大意是给定一个非空整形数组,数组内每个元素都出现了2次,只有一个特别的数字出现了一次,希望使用线性时间(0(n))复杂度找出这个只出现一次的数字。思路:1、题目已经说清楚了是线性,因此只需要一个循环就能找出。2、从每个元素出现2次入手,可以利用这个来找出数字的特性。在数学里面,异或运算是指位与位之间遇到相同的则该位结果为0,不同的数为1...原创 2019-02-23 10:56:22 · 323 阅读 · 0 评论 -
LeetCode-AddTwoNumbers
本例代码下载地址:AddTwoNumber下载题目描述:大意是给定2个非负链表l1和l2,每个链表节点存储一个个位数字,整个链表代表一个高位在右的数字(即跟我们平时看到的数字相反)。将这样的2个链表相加组成的数相加的结果生成一个新的链表。解决思路:了解规则后看似挺简单的,2个链表按照从左到右的节点相加即可。这里需要注意几点细节:1、给定2个链表都为空时的处理。2、2个链表长度不同时的...原创 2019-01-19 17:15:52 · 204 阅读 · 0 评论 -
LeetCode-TwoSum
题目描述:简单地说就是给出一个数字和一个目标数,求数组中符合目标数的任意2个数(不包括自身)在数组中的下标。解决思路:常规做法是for循环,通过第一个数值(比如下标为0,1,2……)与剩下数值比对,符合条件的即为答案。时间复杂度为O(n^2)。代码如下:public int[] twoSum(int[] nums, int target) { if (nums.leng...原创 2019-01-19 11:44:03 · 251 阅读 · 0 评论 -
android使用MD5算法加密密码
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一. MD5算法具有以下特点: 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 2、容易计算:从原数据计算出MD5值很容易。 3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 4、强抗碰撞:已知原数据和其M原创 2015-11-02 18:55:07 · 2497 阅读 · 0 评论 -
找出发贴水王
传说,Tango有一大水王,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间见闻该水王发贴 数目超过了帖子总数的一半,如果你有一个当前论坛上所有帖子的列表,其中帖子作者的ID也在表中 ,你能快速找出这个传说 中的Tango水王吗?思路: 既然水王的帖子起过总数的一半,那么如果遍历一遍ID列表,把不同的ID删除掉,包括水王的 ID,那么最后剩下的帖子中水王的ID还原创 2015-11-01 13:49:22 · 496 阅读 · 0 评论 -
计算阶乘中0的个数
题目: 1、给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N=3628800. N的末尾有两个0 2、求N!的二进制表示中最低位1的位置1、分析:阶乘虽然大,但是求0的个数只有2x5,4x5,6x5,8x5才有0,但是5的数目最小,且都 要用到5,即可转化为求N!中5的个数 若N = 5,则5的个数为1个原创 2015-10-31 14:59:07 · 2278 阅读 · 0 评论 -
求子数组的最大乘积
题目:给定一个长度为N的整数数组,只允许用乘法,不允许用除法,计算任意(N-1)个数的组合中乘积最大的一组,并写出算法的时间复杂度思路:可以理解为从一个数组里去掉某一个数使得数组最大,数组里面有正数,负数,0,可以分为几种情况 数组里面有0的情况: 1、如果数组里面有一个0,负数个数是偶数,那么总值必为0,此时去掉0可以达到最大值 2、如果数组里面有一个0原创 2015-10-30 17:54:01 · 534 阅读 · 0 评论 -
求两个数最大公约数
题目: 写一个程序,求两个正数的最大公约数。如1100100210001,120200021,求其最大公约数分析:设两个数分别为x,y 求其最大公约数f(x,y),如果有x%2==0而y%2不等于0,那么可以 约简为f(x/2,y),同样道理适用于y 如果x与y都是偶数,那么最大公约数可以为f(x/2,y/2)*2 如果x与y都是奇数,那么最大公约数可以为f原创 2015-10-29 19:28:15 · 568 阅读 · 0 评论 -
求一个数二进制中1的个数
题目: 对于一个字节的无符号整形变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能高分析:其实很简单,对于8这样的一个数,其二进制1000,其1的个数为1. 可以将它与它减1的数相与,这样相当于1000与0100相与一次,结果为0 对于10,其二进制1010,其1的个数为2 按照上术的思路,1010与1001相与一次结果为1000原创 2015-10-28 19:52:18 · 409 阅读 · 0 评论 -
6174的问题
例:输入1234假设你有一个各位数字互不相同的四位,把所有数字 从大到小排序后得到a,从小到大排序后得到b.然后用a-b代替原来的这个数,然后继续操作,例如,从1234出发,依次得到4321-1234=3078等。最后得回自己。样例:1234输出:1234->3087->8352->6174->6174->6174思路:可以先用求余的方法将所输入的数变为数组,再经过排序将两个数原创 2015-10-26 22:22:59 · 615 阅读 · 0 评论 -
求数组的子数组之和的最大值
题目: 一个有N个整数元素的一维数组,这个数组当然有很多子数组,那么子数组之和的最大值是什么呢?例如有如下数组,-2,5,3,6,4,-8,6那么最大子数组是5,3 最大值是8思路:可以把每个正数的子数组求出来,分别计算最大值,取最大的,如例题数组有3个正数的子数组 分别为5,3 6 和 8 ,最大值是 5,3 的子数组 以上为错误思路原创 2015-10-27 19:03:53 · 694 阅读 · 0 评论 -
判断一个数是不是2的幕
判断一个数n是否为2的幂,只需要判断n&(n-1)是否为0,若为0,则为2的幂。因为二进制的位数刚好是按2的幂数展开的。一个数是否为2的幂,则其除了首位外其他位数都应该是0;例如:4 8为 0100 1000 &0011 & 0111------- ----------- 0000 0000原创 2015-10-24 18:46:48 · 471 阅读 · 0 评论 -
LeetCode-Maximun Product Subarray
本列源码下载地址:MaximunProductSubarray题目描述:题目大意是给定一个整数数组 nums ,需要在数组中找出乘数最大的子数组。思路:1、题目中有假设序列至少包含一个数。则我们需要假设只有一个数的情况。2、由于有负数,负数乘正数可以将最大乘积瞬间变为最小乘积,最小乘积瞬间变为最大乘积。因此需要变量保存上个最大乘积和最小乘积。3、由于只需要知道乘积结果而不需要知道具体...原创 2019-03-06 19:30:16 · 157 阅读 · 0 评论