![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
lintcode
秦怀
这个作者很懒,什么都没留下…
展开
-
(lintcode)第4题 丑数II
设计一个算法,找出只含素因子2,3,5 的第 n 大的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...样例如果n = 9, 返回 10。注意事项:我们可以认为1也是一个丑数首先,我们想到的是暴力破解,从1开始遍历,每一个数,都不断地除以2,3,5,看最后的结果是不是等于1,如果等于1则说明这个数是丑数,否则不是丑数。代码如下(这样的结果就是很大原创 2017-08-25 10:53:53 · 1200 阅读 · 0 评论 -
(lintcode)第3题统计数字
要求:计算数字k在0到n中的出现的次数,k可能是0~9的一个值。样例例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)首先我们想到暴力破解法,也就是遍历每一个数,同时每一个数都遍历每一位,遍历每一位的方法是不断地整除10,直到整除为0.代码如下:class Solution { ...原创 2017-08-24 15:17:01 · 3803 阅读 · 5 评论 -
(lintcode)第7题二叉树的序列化和反序列化
设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。给出一个测试数据样例, 二叉树{3,9,20,#,#,15,7},表示如下的树结构:3/ \9 20 /原创 2017-08-29 01:37:14 · 2300 阅读 · 1 评论 -
(lintcode)第11题二叉查找树中搜索区间
要求:给定两个值 k1 和 k2(k1 样例如果有 k1 = 10 和 k2 = 22, 你的程序应该返回 [12, 20, 22]. 20 / \ 8 22 / \4 12这道题只有一种方法就是递归调用,这里就不多说了,代码如下:/** * Definition of TreeNode: * public class Tr原创 2017-08-29 09:38:20 · 665 阅读 · 0 评论 -
(lintcode)第5题第k大元素
在数组中找到第k大的元素(可以交换数组中的元素的位置)样例:给出数组 [9,3,2,4,8],第三大的元素是 4给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推首先想到的是最简单的冒泡排序,但是这样的话,特别耗时间,最后的测试数据很多的时候,跑得特别慢,超时了。在这里还是放一下代码:class Solution {原创 2017-08-26 14:28:35 · 805 阅读 · 0 评论 -
(lintcode)第12题带最小值操作的栈
要求:实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。注意事项:如果堆栈中没有数字则不能进行min方法的调用。样例:如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1思路:我们使用两个stack栈来操原创 2017-08-29 10:36:52 · 563 阅读 · 0 评论 -
(lintcode)第13题字符串的查找
要求:对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。样例如果 source = "source" 和 target = "target",返回 -1。如果 source = "abcdabcdefg" 和 target = "bcd",返回 1。原创 2017-08-29 12:57:10 · 2380 阅读 · 0 评论 -
(lintcode)第24题 LFU缓存
LFU是一个著名的缓存算法,实现LFU中的set和get样例:capacity=3set(2,2)set(1,1)get(2)>> 2get(1)>> 1get(2)>> 2set(3,3)set(4,4)get(3)>> -1get(2)>> 2get(1)>> 1get(4)>...原创 2017-09-07 19:22:27 · 1643 阅读 · 2 评论 -
(lintcode)第14题二分查找
要求:给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。样例:在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2。思路:使用递归,每次都找到中间那个数进行判断,直到区间第一个数的下标等于最后一个数的下标。判断的时候,对中间的数进行判断,分为3种原创 2017-08-30 11:05:01 · 2282 阅读 · 0 评论 -
(lintcode)第28题 搜索二维矩阵
写出一个高效的算法来搜索m×n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每行的第一个数大于上一行的最后一个整数。样例考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]给出target = 3,返回true思路比较简单,和蛮原创 2017-09-08 11:14:40 · 764 阅读 · 0 评论 -
(lintcode)第29题交叉字符串
交叉字符串给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。样例比如 s1 ="aabcc"s2 ="dbbca" - 当 s3 ="aadbbcbcac",返回 true. - 当 s3 ="aadbbbaccc", 返回 false.思路:这道题一开始我是使用三个下标分别对应3个字符串,如果匹配上,那么就会往后移一原创 2017-09-12 09:49:07 · 1416 阅读 · 0 评论 -
(lintcode)第15题 全排列(没有重复数字)
要求:给定一个数字列表,返回其所有可能的排列。样例给出一个列表[1,2,3],其全排列为:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路:我们首先想到的是使用递归来实现,递归里面利用了回溯法和深度优先搜索。假如有1,2,3,那么第一层递归的第一层循环里会往list里面加入原创 2017-09-03 16:28:59 · 2508 阅读 · 0 评论 -
(lintcode)第31题,数组划分
给出一个整数数组nums和一个整数k。划分数组(即移动数组nums中的元素),使得:所有小于k的元素移到左边所有大于等于k的元素移到右边返回数组划分的位置,即数组中第一个位置i,满足nums[i] 大于等于k。注意事项你应该真正的划分数组nums,而不仅仅只是计算比k小的整数数,如果数组nums中的所有元素都比k小,则返回 n原创 2017-12-19 21:55:30 · 1075 阅读 · 0 评论 -
(lintcode)第22题 平面列表
要求:给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。注意事项如果给定的列表中的要素本身也是一个列表,那么它也可以包含列表。样例:给定[1,2,[1,2]],返回[1,2,1,2]。给定[4,[3,[2,[1]]]],返回[4,3,2,1]。思路:比较简单,直接递归原创 2017-09-06 01:16:01 · 1150 阅读 · 0 评论 -
(lintcode)第9题Fizz Buee问题
要求:给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:如果这个数被3整除,打印fizz.如果这个数被5整除,打印buzz.如果这个数能同时被3和5整除,打印fizz buzz.样例比如 n = 15, 返回一个字符串数组:[ "1", "2", "fizz", "4", "buzz", "fizz", "7", "8", "fizz",原创 2017-08-28 12:48:35 · 556 阅读 · 0 评论 -
(lintcode)第20题 骰子求和
要求:扔n个骰子,向上面的数字之和为S。给定 Givenn,请列出所有可能的S值及其相应的概率。样例给定n = 1,返回[ [1, 0.17], [2, 0.17], [3, 0.17], [4, 0.17], [5, 0.17], [6, 0.17]]。思路:我们知道,如果只有一个骰子,那么它的可能区间是1到6,如果两个骰子,那么可能的区间是是2到12原创 2017-09-05 22:15:56 · 4341 阅读 · 5 评论 -
(lintcode)第6题 合并排序数组
合并两个排序的整数数组A和B变成一个新的数组。 样例 给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]public class Solution { /* * @param A: sorted integer array A * @param B: sorted integer array B * @return:原创 2017-08-23 15:29:14 · 677 阅读 · 0 评论 -
(lintcode)第2题尾部的零
设计一个算法,计算出n阶乘中尾部零的个数样例11! = 39916800,因此应该返回 2对于这个问题,我们的思路如下,首先要想得到尾部为0,那么一定是乘以5或者5的倍数,才会得到这样的结果,那么举一个例子,我们设参数为101,也就是101的阶乘尾部有多少个零,我们列举一下5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95原创 2017-08-24 09:25:46 · 1713 阅读 · 3 评论 -
(lintcode)第336题斐波那契数列
要求:查找斐波纳契数列中第 N 个数所谓的斐波纳契数列是指:前2个数是 0 和 1 ,第 i 个数是第 i-1 个数和第i-2 个数的和,斐波纳契数列的前10个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34 … 样例 给定 1,返回 0 给定 2,返回 1 给定 10,返回 34 第一次想到的方法是使用递归,但是递归的效率比较低,时间超限,报错(代码运行时间超过了限原创 2017-08-22 11:28:33 · 768 阅读 · 0 评论 -
(lintcode)第8题旋转字符串
要求:给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)样例对于字符串 "abcdefg".offset=0 => "abcdefg"offset=1 => "gabcdef"offset=2 => "fgabcde"offset=3 => "efgabcd"暂时只想到了暴力破解的方法(accept),感觉字符串要是特别长,移动起来还是耗费很长时间,以原创 2017-08-26 16:00:46 · 1157 阅读 · 0 评论 -
(lintcode)第452题删除链表中的元素
要求:删除链表中等于给定值val的所有节点,样例:给出链表1->2->3->3->4->5->3, 和 val =3, 你需要返回删除3之后的链表:1->2->4->5。代码如下:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode原创 2017-08-23 10:46:35 · 488 阅读 · 0 评论 -
(lintcode)第454题 矩阵面积
要求:实现一个矩阵类Rectangle,包含如下的一些成员变量与函数:两个共有的成员变量width和height分别代表宽度和高度。一个构造函数,接受2个参数 width 和 height 来设定矩阵的宽度和高度。一个成员函数getArea,返回这个矩阵的面积。代码如下:public class Rectangle { /* * Define two原创 2017-08-23 10:54:42 · 1558 阅读 · 0 评论 -
(lintcode)第16题 带重复元素的排列
要求:给出一个具有重复数字的列表,找出列表所有不同的排列。样例:给出列表[1,2,2],不同的排列有:[ [1,2,2], [2,1,2], [2,2,1]]思路:和前面的1没有重复数字的全排列差不多http://blog.csdn.net/aphysia/article/details/77774105,其中为了去除重复的元素,先对它们进行排序,然后相同的原创 2017-09-05 00:16:11 · 1748 阅读 · 0 评论 -
(lintcode)第463题整数排序
要求:给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。样例:对于数组[3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。下面使用最常见的冒泡排序实现:public class Solution { /* * @param A: an integer array * @retur原创 2017-08-23 11:26:04 · 449 阅读 · 0 评论 -
(lintcode)第17题 子集
要求:给定一个含不同整数的集合,返回其所有的子集注意事项:子集中的元素排列必须是非降序的,解集必须不包含重复的子集。样例如果 S =[1,2,3],有如下的解:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]思路:不考虑非降序,一个个数字插进去,每一层插进去一个,每一个都有两种情原创 2017-09-05 11:28:57 · 1312 阅读 · 0 评论 -
(lintcode)第632题二叉树的最大节点
要求:在二叉树中寻找值最大的节点并返回。样例给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为3的节点,返回值是节点,不是数值。代码如下:public class Solution { /** * @param root the root of bina原创 2017-08-23 14:43:06 · 585 阅读 · 0 评论 -
(lintcode)第1题 A+B问题
给出两个整数a和b, 求他们的和, 但不能使用+等数学运算符说明a和b都是32位整数么?是的我可以使用位运算符么?当然可以样例如果a=1并且b=2,返回3由于不可以使用加号,那么我们只能考虑使用位运算和二进制来计算,首先假如要计算7+17,那么我们看7的二进制表示为111,17的二进制表示为10001第一步:忽略掉进位来相加,就是0+0=0,0+1原创 2017-08-23 16:58:21 · 3069 阅读 · 4 评论 -
(lintcode)第18题 带重复元素的子集
要求:给定一个可能具有重复数字的列表,返回其所有可能的子集注意事项子集中的每个元素都是非降序的两个子集间的顺序是无关紧要的解集中不能包含重复子集样例如果 S =[1,2,2],一个可能的答案为:[ [2], [1], [1,2,2], [2,2], [1,2], []]思路:可以看这篇ht原创 2017-09-05 17:38:40 · 845 阅读 · 0 评论 -
(lintcode)第30题 插入区间
给出一个无重叠的按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。样例 插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。 插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。思路:先加入list正确的位置,再合并可以原创 2017-12-19 13:05:18 · 703 阅读 · 0 评论