- 博客(91)
- 收藏
- 关注
原创 分割回文串
给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。返回s所有可能的回文串分割方案。您在真实的面试中是否遇到过这个题? Yes样例给出 s = "aab",返回[ ["aa", "b"], ["a", "a", "b"]]public class Solution { /** * @p
2016-12-06 17:39:52 429
原创 逆序对
在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。给你一个数组,求出这个数组中逆序对的总数。概括:如果a[i] > a[j] 且 i 您在真实的面试中是否遇到过这个题? Yes样例序列 [2, 4, 1, 3, 5] 中,有 3 个逆序对 (2, 1), (4, 1), (4, 3),则返回 3 。1.
2016-12-05 16:24:12 242
原创 用栈模拟汉诺塔问题
在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件:(1) 每次只能移动一个盘子。(2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。(3) 每个盘子只能放在比它大的盘子上面。请写一段程序,实现将第一个堆的盘子移动到最后一个
2016-11-29 20:19:30 1839 2
原创 Fizz Buzz 问题
给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:如果这个数被3整除,打印fizz.如果这个数被5整除,打印buzz.如果这个数能同时被3和5整除,打印fizz buzz.样例比如 n = 15, 返回一个字符串数组:[ "1", "2", "fizz", "4", "buzz", "fizz", "7", "8",
2016-11-29 15:38:25 417
原创 旋转字符串
给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)样例对于字符串 "abcdefg".offset=0 => "abcdefg"offset=1 => "gabcdef"offset=2 => "fgabcde"offset=3 => "efgabcd"public class Solution { /** * @
2016-11-29 15:21:15 207
原创 合并排序数组
合并两个排序的整数数组A和B变成一个新的数组。样例给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]挑战 你能否优化你的算法,如果其中一个数组很大而另一个数组很小?class Solution { /** * @param A and B: sorted integer arra
2016-11-29 10:37:30 287
原创 字符串查找
TIPS:1.string=null 和 string=""String s ;该语句表示只是声明了一个引用变量,但是并没有初始化引用,所以对变量s的任何操作(除了初始化赋值外) 都将引发异常. String s=null; 表示未申请任何内存资源,即些语句表示声明了一个引用变量并初始化引用,但是该引用没有指向任何对象.但可以把它作为参数传递或其它使用,但是不能调用它作为对象的方法
2016-11-29 10:11:53 537
原创 二分查找
给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。样例在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2。class Solution { /** * @param nums: The integer arra
2016-11-28 19:49:55 208
原创 搜索二维矩阵
写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每行的第一个数大于上一行的最后一个整数。考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]给出 target = 3,返回 truepublic class So
2016-11-28 18:10:03 236
原创 插入区间
给出一个无重叠的按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。样例插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。/** * Defi
2016-11-28 16:11:23 275
原创 翻转链表
样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val
2016-11-28 15:20:00 195
原创 恢复旋转排序数组
给定一个旋转排序数组,在原地恢复其排序。什么是旋转数组?比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]样例[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]public class Solution { /**
2016-11-24 10:07:18 276
原创 最小/大子数组
给定一个整数数组,找到一个具有最小/大和的子数组。返回其最小/大和。public class Solution { /** * @param nums: a list of integers * @return: A integer indicate the sum of minimum subarray */ public int mi
2016-11-23 10:18:47 173
原创 主元素
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。样例给出数组[1,1,1,1,2,2,2],返回 1挑战 要求时间复杂度为O(n),空间复杂度为O(1)public class Solution { /** * @param nums: a list of integers
2016-11-22 17:58:41 505
原创 在二叉查找树中插入节点
给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。样例给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / \1 4 --> 1 4 / / \ 3 3 6
2016-11-22 17:05:19 279
原创 数组剔除元素后的乘积
给定一个整数数组A。定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。【学习的好方法!!!!】 public ArrayList productExcludeItself(ArrayList A) { // write your code ArrayLi
2016-11-22 14:53:38 192
原创 比较字符串
比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母 注意事项在 A 中出现的 B 字符串里的字符不需要连续或者有序。样例给出 A = "ABCD" B = "ACD",返回 true给出 A = "ABCD" B = "AABC", 返回 falsepublic class Sol
2016-11-22 09:58:42 296
原创 搜索插入位置
给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。你可以假设在数组中无重复元素。如果找不到该数,high是比该数小的那个数的下标,而low是比该数大的那个数的下标。public class Solution { /** * param A : an integer sorted arra
2016-11-22 09:14:45 291
原创 合并排序数组 II
合并两个排序的整数数组A和B变成一个新的数组。 注意事项你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。class Solution { /** * @param A: sorted integer array A which has m elements, * but size of A
2016-11-21 16:15:28 312
原创 二叉树的遍历
1 前序遍历【中左右】/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; *
2016-11-21 15:49:33 181
原创 平衡二叉树
给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 样例给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7}A) 3 B) 3 / \ \ 9 20 20
2016-11-09 17:17:23 190
原创 落单的数
给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。【异或运算】样例给出 [1,2,2,1,3,4,3],返回 4public class Solution { /** *@param A : an integer array *return : a integer */ publ
2016-11-09 15:36:11 365
原创 链表划分
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null/** * Definition for ListNode. * public class ListNode {
2016-11-09 15:23:34 148
原创 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3./** * Definition of TreeNode: * public class TreeNode { * public int val;
2016-11-09 15:04:26 165
原创 数字三角形
给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。 注意事项如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。样例比如,给出下列数字三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶到底部的最小路径和为11
2016-11-09 10:39:36 301
原创 最小路径和
给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。 注意事项你在同一时间只能向下或者向右移动一步【动态规划】public class Solution { /** * @param grid: a list of lists of integers. * @retur
2016-11-09 10:03:42 220
原创 爬楼梯
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?样例比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法返回 3public class Solution { /** * @param n: An integer * @return: An integer */
2016-11-08 22:12:48 201
原创 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null/** * Definition for ListNode * public class ListNode { * int val; * List
2016-11-08 21:51:30 578
原创 不同的路径 II
"不同的路径" 的跟进问题:现在考虑网格中有障碍物,那样将会有多少条不同的路径?网格中的障碍和空位置分别用 1 和 0 来表示。样例如下所示在3x3的网格中有一个障碍物:[ [0,0,0], [0,1,0], [0,0,0]]一共有2条不同的路径从左上角到右下角。public class Solution { /**
2016-11-08 21:15:16 208
原创 不同的路径
有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为'Finish')。问有多少条不同的路径?样例1,11,21,31,41,51,61,72,1
2016-11-08 16:31:01 179
原创 哈希函数
在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如:hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 + ascii(d)) %
2016-11-08 10:48:09 210
原创 子数组之和
给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置样例给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].【由于只要求给出一组结果 所以只要找到第一个子数组即可】public class Solution { /** * @param nums: A list of integer
2016-11-03 16:32:58 244
原创 二叉树的最小深度
给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 2【主要在递归时要注意,当有的节点有一个子树为空时,不是叶子节点要继续寻找】
2016-11-03 15:16:09 2840
原创 O(1)时间检测2的幂次
用 O(1) 时间检测整数 n 是否是 2 的幂次。 注意事项O(1) 时间复杂度样例n=4,返回 true;n=5,返回 false.算法思想:判断(n&(n-1))==0是否成立因为2的幂次n的二进制只有一位为1,而n-1的二进制则恰好除了n为1的那位为0之外其余位都为1class Solution {
2016-11-03 09:51:48 2062
原创 两个字符串是变为词
写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串。样例给出 s = "abcd",t="dcab",返回 true.给出 s = "ab", t = "ab", 返回 true.给出 s = "ab", t = "ac", 返回 false.[也可以通过每个字符串中各个字符出现的次数, 然后看这两个字符串中各字符
2016-11-02 19:23:20 282
原创 合并两个排序链表
将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; *
2016-11-02 16:21:11 219
原创 链表倒数第n个节点
找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1./** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(i
2016-11-02 11:10:49 659
原创 链表求和
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null/** * Definition for singly-linked list. * public
2016-11-02 10:49:44 273
原创 删除元素
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。元素的顺序可以改变,并且对新的数组不会有影响。样例给出一个数组 [0,4,4,0,0,2,4,4],和值 4返回 4 并且4个元素的新数组为[0,0,0,2]public class Solution { /** *@param A: A list of integers
2016-11-01 19:35:20 272
原创 链表插入排序
【插入排序】基本思想在插入第i个数时,前i-1个数的顺序已经是排好的。只需将第i个数与前i-1个依次比较找到合适的插入位置即可。样例Given 1->3->2->0->null, return 0->1->2->3->null/** * Definition for ListNode. * public class ListNode {
2016-11-01 18:51:28 203
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人