
LeetCode
文章平均质量分 56
若即若离ing
希望可以一起交流IT心得与体会。共同进步哈!!!
展开
-
搜索二维矩阵
写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每行的第一个数大于上一行的最后一个整数。样例考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]给出 target = 3,返回 trueimport java.util原创 2017-06-04 22:52:27 · 284 阅读 · 0 评论 -
交叉字符串
给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。样例比如 s1 = "aabcc" s2 = "dbbca" 当 s3 = "aadbbcbcac",返回 true.当 s3 = "aadbbbaccc", 返回 false.dp[i][j]表示s1上[0-i]的串和s2上[0,j]的串是否可以交叉构成 s3上[0,i+j]的串import原创 2017-06-04 22:53:58 · 722 阅读 · 0 评论 -
插入区间
给出一个无重叠的按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。样例插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。/** * Definition原创 2017-06-04 22:55:36 · 218 阅读 · 0 评论 -
格雷编码
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个二进制的差异。给定一个非负整数 n ,表示该代码中所有二进制的总数,请找出其格雷编码顺序。一个格雷编码顺序必须以 0 开始,并覆盖所有的 2n 个整数。 注意事项对于给定的 n,其格雷编码顺序并不唯一。根据以上定义, [0,2,3,1] 也是一个有效的格雷编码顺序。样例给定 n = 2, 返回 [0,1,3,2原创 2017-06-15 21:59:49 · 570 阅读 · 0 评论 -
三角形计数
给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?样例例如,给定数组 S = {3,4,6,7},返回 3其中我们可以找到的三个三角形为:{3,4,6}{3,6,7}{4,6,7}给定数组 S = {4,4,4,4}, 返回 4其中我们可以找到的三个三角形为:{4(1),4(2),4(3)}{原创 2017-06-15 22:45:40 · 867 阅读 · 0 评论 -
两数之和
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。 注意事项你可以假设只有一组答案。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].import ja原创 2017-06-15 23:13:38 · 512 阅读 · 0 评论 -
三数之和
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。 注意事项在三元组(a, b, c),要求a 结果不能包含重复的三元组。样例如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:(-1, 0, 1)(-1, -1, 2)import java.util.Ar原创 2017-06-15 23:35:40 · 477 阅读 · 0 评论 -
四数之和
给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d)。 注意事项四元组(a, b, c, d)中,需要满足a 答案中不可以包含重复的四元组。样例例如,对于给定的整数数组S=[1, 0, -1, 0, -2, 2] 和 target=0. 满足要求的四元组集合为:(-1, 0, 0, 1)(-2, -1, 1, 2)原创 2017-06-15 23:56:21 · 572 阅读 · 0 评论 -
最接近3数之和
给一个包含 n 个整数的数组 S, 找到和与给定整数 target 最接近的三元组,返回这三个数的和。 注意事项只需要返回三元组之和,无需返回三元组本身样例例如 S = [-1, 2, 1, -4] and target = 1. 和最接近 1 的三元组是 -1 + 2 + 1 = 2.import java.util.Arrays;import java.uti原创 2017-06-16 11:08:06 · 434 阅读 · 0 评论 -
链表交叉点
请写一个程序,找到两个单链表最开始的交叉节点。如果两个链表没有交叉,返回null。在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。样例下列两个链表:A: a1 → a2 ↘ c1 → c2 → c3 ↗原创 2017-06-05 22:37:42 · 529 阅读 · 0 评论 -
链表倒数第n个节点
找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.import java.util.Scanner;/** * 找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. *原创 2017-06-16 18:57:08 · 478 阅读 · 0 评论 -
交错正负数
给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。 注意事项不需要保持正整数或者负整数原来的顺序。样例给出数组[-1, -2, -3, 4, 5, 6],重新排序之后,变成[-1, 5, -2, 4, -3, 6]或者其他任何满足要求的答案思路,首先将数组中的所有正数(负数)移到左半边,负数(正数)移到右半边,我的代码中是后一种,也就是说所有的正数在前,负数原创 2017-06-16 22:12:43 · 1066 阅读 · 0 评论 -
A+B问题
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。 注意事项你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b,计算他们的和并返回就行。您在真实的面试中是否遇到过这个题? Yes说明a和b都是 32位 整数么?是的我可以使用位运算符么?当然可以样例原创 2017-06-01 20:39:57 · 320 阅读 · 0 评论 -
尾部的0(n的阶乘的尾部0的个数)
设计一个算法,计算出n阶乘中尾部零的个数您在真实的面试中是否遇到过这个题? Yes样例11! = 39916800,因此应该返回 2class Solution { /* * param n: An desciption * return: An integer, denote the number of tr原创 2017-06-01 20:51:06 · 303 阅读 · 0 评论 -
统计数字
计算数字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)import java.util.Scanner;/** * 计算数字k在0到n中的出现的次数,k可能是0~9的一个值样例例如原创 2017-06-01 20:53:15 · 402 阅读 · 0 评论 -
第K大的数
在数组中找到第k大的元素 注意事项你可以交换数组中的元素的位置样例给出数组 [9,3,2,4,8],第三大的元素是 4给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推import java.util.Scanner;/** * * 第k大的数 * @auth原创 2017-06-01 20:56:06 · 212 阅读 · 0 评论 -
丑数II
设计一个算法,找出只含素因子2,3,5 的第 n 大的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12... 注意事项我们可以认为1也是一个丑数样例如果n = 9, 返回 10import java.util.Scanner;/** * 设计一个算法,找出只含素因子2,3,5 的第 n原创 2017-06-01 20:58:53 · 646 阅读 · 0 评论 -
合并两个排序数组
合并两个排序的整数数组A和B变成一个新的数组。样例给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]import java.util.Scanner;/** * 合并两个排序的整数数组A和B变成一个新的数组。样例给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]原创 2017-06-01 21:00:20 · 1008 阅读 · 0 评论 -
硬币排成线I和硬币排成线II问题
有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。请判定 第一个玩家 是输还是赢?样例n = 1, 返回 true.n = 2, 返回 true.n = 3, 返回 false.n = 4, 返回 true.n = 5, 返回 true.public class Solutio原创 2017-06-01 21:03:23 · 507 阅读 · 0 评论 -
翻转字符串
给定一个字符串,逐个翻转字符串中的每个单词。说明单词的构成:无空格字母构成一个单词输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个import java.util.Scanner;/** * 给定一个字符串,逐个翻转字符串中的每个单词。说明单词的构成:无空格字母构成一个单原创 2017-06-17 20:59:00 · 695 阅读 · 0 评论 -
比较字符串
比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母 注意事项在 A 中出现的 B 字符串里的字符不需要连续或者有序。样例给出 A = "ABCD" B = "ACD",返回 true给出 A = "ABCD" B = "AABC", 返回 falseimport java.util.Scanner;/** * 比较两个原创 2017-06-17 21:12:52 · 650 阅读 · 0 评论 -
链表划分
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。您在真实的面试中是否遇到过这个题? Yes样例给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->nullimport java.util.Scanner原创 2017-06-17 22:04:19 · 799 阅读 · 0 评论 -
合并排序数组II
合并两个排序的整数数组A和B变成一个新的数组。 注意事项你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。样例给出 A = [1, 2, 3, empty, empty], B = [4, 5]合并之后 A 将变成 [1,2,3,4,5]import java.util.Scanner;/** * 合并两个排序的整数数组A和B变成原创 2017-06-17 22:21:50 · 670 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。你可以假设在数组中无重复元素。样例[1,3,5,6],5 → 2[1,3,5,6],2 → 1[1,3,5,6], 7 → 4[1,3,5,6],0 → 0import java.util.Scanner;/** * 给定一个排序数组和一个目标值,原创 2017-06-18 10:48:04 · 515 阅读 · 0 评论 -
根据树的后序和中序序列或者前序和中序序列构建二叉树,
(1)根据中序遍历和后序遍历树构造二叉树 注意事项你可以假设树中不存在相同数值的节点样例给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2]返回如下的树: 2 / \1 3import java.util.Arrays;import java.util.Scanner;/** * 根据中序遍历和后序遍历树构造二叉树 注意事项原创 2017-06-02 13:17:07 · 418 阅读 · 0 评论 -
最长无重复字符串
给定一个字符串,请找出其中无重复字符的最长子字符串。样例例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 3。对于,"bbbbb",其无重复字符的最长子字符串为"b",长度为1。挑战 O(n) 时间import java.util.HashMap;import java.util.Map;import java.util.Scanne原创 2017-06-06 19:28:01 · 329 阅读 · 0 评论 -
寻找旋转数组中最小的数I和II
I:假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。你可以假设数组中不存在重复的元素。 注意事项You may assume no duplicate exists in the array.样例给出[4,5,6,7,0,1,2] 返回 0II:假设一个旋转排序的数组其起始原创 2017-06-06 19:48:18 · 236 阅读 · 0 评论 -
数组划分
给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:所有小于k的元素移到左边所有大于等于k的元素移到右边返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。你应该真正的划分数组 nums,而不仅仅只是计算比 k 小的整数数,如果数组 nums 中的所有元素都比 k 小,则返回 nums.length。样例原创 2017-06-06 21:29:32 · 562 阅读 · 0 评论 -
最小子串覆盖
给定一个字符串source和一个目标字符串target,在字符串source中找到包括所有目标字符串字母的子串。 注意事项如果在source中没有这样的子串,返回"",如果有多个这样的子串,返回起始位置最小的子串。说明在答案的子串中的字母在目标字符串中是否需要具有相同的顺序?——不需要。样例给出source = "原创 2017-06-06 23:12:32 · 607 阅读 · 0 评论 -
合并两个排序链表
将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。import java.util.Scanner;/** * 将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->原创 2017-06-18 14:58:32 · 475 阅读 · 0 评论 -
最小差
给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组 A 中取 A[i],数组 B 中取 B[j],A[i] 和 B[j]两者的差越小越好(|A[i] - B[j]|)。返回最小差。样例给定数组 A = [3,4,6,7], B = [2,3,8,9],返回 0。import java.util.Arrays;import java.util.Scanner;原创 2017-06-18 15:23:41 · 882 阅读 · 0 评论 -
乘机最大子序列
找出一个序列中乘积最大的连续子序列(至少包含一个数)。样例比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6。import java.util.Arrays;import java.util.Scanner;/** * 找出一个序列中乘积最大的连续子序列(至少包含一个数)。样例比如, 序列 [2,3,-2,4] 中乘积最大的子序列原创 2017-06-18 16:40:41 · 574 阅读 · 0 评论 -
k数II
给定n个不同的正整数,整数k(1在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。样例给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]]import java.util.ArrayList;import java.util.Scanner;/** * 给定n个不同的正整数,整数k(1<= k原创 2017-06-18 17:15:59 · 565 阅读 · 0 评论 -
实现一个带有取最小值min方法的栈
实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。 注意事项如果堆栈中没有数字则不能进行min方法的调用样例如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1import jav原创 2017-06-02 21:36:10 · 1363 阅读 · 0 评论 -
二叉排序树查找指定区间的值
给定两个值 k1 和 k2(k1 样例如果有 k1 = 10 和 k2 = 22, 你的程序应该返回 [12, 20, 22]. 20 / \ 8 22 / \4 12import java.util.ArrayList;import java.util.Scanner;import java.util.Stack;/**原创 2017-06-02 21:37:50 · 823 阅读 · 0 评论 -
判断是否是合法的而叉查找树
给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。节点的右子树中的值要严格大于该节点的值。左右子树也必须是二叉查找树。一个节点的树也是二叉查找树。您在真实的面试中是否遇到过这个题? Yes样例一个例子: 2 / \1 4 / \ 3 5上述这棵二叉树序列化为 {原创 2017-06-02 21:39:20 · 299 阅读 · 0 评论 -
旋转字符串
给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)样例对于字符串 "abcdefg".offset=0 => "abcdefg"offset=1 => "gabcdef"offset=2 => "fgabcde"offset=3 => "efgabcd"import java.util.Scanner;/** * 给定一个字符串和一个偏移量,根据原创 2017-06-02 21:40:28 · 317 阅读 · 0 评论 -
二叉树的序列化与反序列化
设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。 注意事项There is no limit of how you deserialize or serialize a binary原创 2017-06-02 21:41:47 · 392 阅读 · 0 评论 -
字符串匹配
对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。说明在面试中我是否需要实现KMP算法?不需要,当这种问题出现在面试中时,面试官很可能只是想要测试一下你的基础应用能力。当然你需要先跟面试官确认清楚要怎么实现这个题。样例如果 source =原创 2017-06-02 21:43:16 · 322 阅读 · 0 评论 -
k数和
给定n个不同的正整数,整数k(k 在这n个数里面找出K个数,使得这K个数的和等于目标数字,求问有多少种方案?样例给出[1,2,3,4],k=2, target=5,[1,4] and [2,3]是2个符合要求的方案import java.util.Scanner;/** * 给定n个不同的正整数,整数k(k < = n)以及一个目标数字。 在这n个数里面找出K个数原创 2017-06-18 21:42:38 · 756 阅读 · 0 评论