
算法题
cblstc
海阔凭鱼跃,天高任鸟飞
展开
-
leetcode 142 环形链表
文章目录前言正文前言最近为什么突然开始刷题了呢。主要是这几年来一直有刷题的计划,但都不能很好的坚持下来。原因还是找不到正确的刷题方法,盲目刷题,一道题目可以想半天。于是我就放低自己的标准,每天刷一道题目,刷题时结合题解,一天也不会花太多时间。循序渐进,也不要有很大的功利性。正文今天分享一下刷到的比较有意思的题目,环形链表,题目大概就是要求找出环形链表的入口。看题解的数学分析时,觉得有点意思,当然,我是想不到这种解决方案的。主要使用快慢指针法,由于是环形链表,快指针肯定会和慢指针相遇。那么通过推原创 2022-01-15 19:38:06 · 398 阅读 · 0 评论 -
LintCode: 删除排序数组中的重复数字
题目:删除一个数组中重复的数字,并返回新数组的长度解法:public class Solution { public int removeDuplicates(int[] A) { if (A == null || A.length == 0) { return 0; } int size = 0;...原创 2018-02-27 20:57:41 · 404 阅读 · 0 评论 -
LintCode: 合并两个排序好的数组
题目:合并两个排序好的数组,要求新数组也是有序的分析:假设两个数组为A和B,新数组为C。A和B的元素比较,小的放在C中,并且指针+1。临界条件很重要:假设A的指针越界(退出循环的条件),那么B的指针肯定没有越界(为什么?看代码),并且B未比较的元素一定比A所有元素大(A指针都越界了,说明A最后一个元素进入新数组了,说明这个元素比B某个元素小),所以直接将B剩下的元素添加到C中。代码:原创 2018-01-24 10:08:46 · 310 阅读 · 0 评论 -
LintCode: 第k大的元素
问题:给定一个数组,求第k大的元素分析:题目可以转换成排序的问题,因为排序好的数组查询很方便。。惯性思维的解法(超出时间):从左到右遍历得到最小的元素放在左边class Solution { /* * @param k : description of k * @param nums : array of nums * @return: d原创 2018-01-24 05:48:49 · 240 阅读 · 0 评论 -
LintCode: 丑数II
题目:计算第n个丑数的值,如输入9,输出10。丑数:只包含2或3或5为因数的数是丑数。如8=2x2x2,6=2x3,12=2x2x3,所以8,6,12都是丑数;14=2x7,所以14不是丑数。超时解法(由于不规范使用递归导致超时。。):public class Solution { /* * @param n: An integer * @return: the原创 2018-01-23 07:34:30 · 265 阅读 · 0 评论 -
LintCode: 统计数字
题目:要求统计0-n内k存在的次数,如0-11中1存在4次分析:遍历0-n的每个数,然后对每个数进行数字统计,得到的结果相加。其中,对一个数进行数字统计可使用/%法,即第一次%得到个位,然后/再%,得到十位,然后/再%,得到百位,以此类推。代码:public class Solution { /* * @param : An integer * @par原创 2018-01-23 06:22:25 · 320 阅读 · 0 评论 -
LintCode: 尾部的零
问题:要求得到阶乘结果尾部的零,如11! = 39916800,尾部的零有2个。分析:当乘以5的倍数时,如5、10、15、25...,末尾会出现零,所以问题转换为阶乘过程中碰到了多少个5的倍数。比如:11!有两个5的倍数,一个是5,一个是10。如果这样就结束的话,就太天真了。我们考虑另一种情况,25=5x5,25有两个5!125=5x5x5,125有三个5!所以,除了计算5的倍数外,还原创 2018-01-22 07:46:28 · 273 阅读 · 0 评论 -
LintCode:A + B问题
题目:要求不使用运算符完成a+b操作分析:1. 不带进位加法,int sum = a ^ b;2. 计算进位,int carry = (a & b) 3. 加上进位,sum + carry。这样,又回到1、2步的操作。很明显,退出循环的条件是:进位为0;递归解法public class Solution { /* * @param : An原创 2018-01-22 06:47:29 · 225 阅读 · 0 评论