自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

原创 子数组之和-LintCode

给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置 样例 给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].#ifndef C138_H#define C138_H#include<iostream>#include<vector>#include<map>using namespace std;class Sol

2017-07-28 08:14:49 149

原创 克隆图-LintCode

克隆一张无向图,图中的每个节点包含一个 label 和一个列表 neighbors。 数据中如何表示一个无向图?http://www.lintcode.com/help/graph/ 你的程序需要返回一个经过深度拷贝的新图。这个新图和原图具有同样的结构,并且对新图的任何改动不会对原图造成任何影响。 比如,序列化图 {0,1,2#1,2#2,2} 共有三个节点, 因此包含两个个分隔符#。 第一

2017-07-27 15:20:47 485

原创 分割回文串-LintCode

给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。 返回s所有可能的回文串分割方案。 样例 给出 s = “aab”,返回 [ [“aa”, “b”], [“a”, “a”, “b”] ]#ifndef C136_H#define C136_H#include<iostream>

2017-07-27 09:33:06 231

转载 LRU缓存策略-LintCode

为最近最少使用(LRU)缓存策略设计一个数据结构,它应该支持以下操作:获取数据(get)和写入数据(set)。 获取数据get(key):如果缓存中存在key,则获取其数据值(通常是正数),否则返回-1。 写入数据set(key, value):如果key还没有在缓存中,则写入其数据值。当缓存达到上限,它应该在写入新数据之前删除最近最少使用的数据用来腾出空闲位置。struct Node{

2017-07-26 10:08:59 663

原创 数字组合-LintCode

给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。 例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为: [7], [2,2,3] 注意事项 所有的数字(包括目标数字)均为正整数。 元素组合(a1, a2, … , ak)必须是非降序(ie, a1 ≤ a2 ≤ … ≤ ak)。 解集不能包含重复的组合。 样

2017-07-26 08:50:26 244

原创 单词搜索 II-LintCode

给出一个由小写字母组成的矩阵和一个字典。找出所有同时在字典和矩阵中出现的单词。一个单词可以从矩阵中的任意位置开始,可以向左/右/上/下四个相邻方向移动。 给出矩阵: doaf agai dcan 和字典: {“dog”, “dad”, “dgdg”, “can”, “again”} 返回 {“dog”, “dad”, “can”, “again”}#ifndef C132_H#def

2017-07-25 09:44:51 240

原创 最长单词-LintCode

给一个词典,找出其中所有最长的单词。 您在真实的面试中是否遇到过这个题? Yes 样例 在词典 { “dog”, “google”, “facebook”, “internationalization”, “blabla” } 中, 最长的单词集合为 [“internationalization”] 在词典 { “like”, “love”,

2017-07-25 08:19:25 239

原创 堆化-LintCode

给出一个整数数组,堆化操作就是把它变成一个最小堆数组。 对于堆数组A,A[0]是堆的根,并对于每个A[i],A [i * 2 + 1]是A[i]的左儿子并且A[i * 2 + 2]是A[i]的右儿子。 说明 什么是堆? 堆是一种数据结构,它通常有三种方法:push, pop 和 top。其中,“push”添加新的元素进入堆,“pop”删除堆中最小/最大元素,“top”返回堆中最小/最大元素。

2017-07-24 13:51:42 243

原创 重哈希-LintCode

哈希表容量的大小在一开始是不确定的。如果哈希表存储的元素太多(如超过容量的十分之一),我们应该将哈希表容量扩大一倍,并将所有的哈希值重新安排。假设你有如下一哈希表: size=3, capacity=4 [null, 21, 14, null] ↓ ↓ 9 null ↓ null 哈希函数为: int hashcode(

2017-07-24 10:45:29 209

原创 哈希函数-LintCode

在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如: hashcode(“abcd”) = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 + ascii(d)) % HASH_

2017-07-24 09:38:26 168

原创 拓扑排序-LintCode

给定一个有向图,图节点的拓扑排序被定义为: 对于每条有向边A–> B,则A必须排在B之前   拓扑排序的第一个节点可以是任何在图中没有其他节点指向它的节点   找到给定图的任一拓扑排序 样例 对于下列图:这个图的拓扑排序可能是: [0, 1, 2, 3, 4, 5] 或者 [0, 2, 3, 1, 5, 4] 或者 ……/** * Definition for Directed

2017-07-21 14:36:00 286

原创 最长连续序列-LintCode

给定一个未排序的整数数组,找出最长连续序列的长度。 说明 要求你的算法复杂度为O(n) 样例 给出数组[100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4],返回所求长度 4#ifndef C124_H#define C124_H#include<iostream>#include<vector>#include<queue>using nam

2017-07-20 17:07:07 193

原创 单词搜索 -LintCode

给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。 单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。 样例 给出board =[“ABCE”,“SFCS”,“ADEE”]word = “ABCCED”, -&gt;返回 true, word = “SEE”,-&gt; 返回 true, ...

2017-07-20 16:13:50 564 2

原创 直方图最大矩形覆盖-LintCode

Given n non-negative integers representing the histogram’s bar height where the width of each bar is 1, find the area of largest rectangle in the histogram. Above is a histogram where width of each ba

2017-07-20 09:42:20 290

转载 单词接龙 II-LintCode

给出两个单词(start和end)和一个字典,找出所有从start到end的最短转换序列 比如: 每次只能改变一个字母。 变换过程中的中间单词必须在字典中出现。 注意事项 所有单词具有相同的长度。 所有单词都只包含小写字母。 样例 给出数据如下: start = “hit” end = “cog” dict = [“hot”,”dot”,”dog”,”lot”,”log”]

2017-07-19 09:23:10 671

原创 单词接龙-LintCode

给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列 比如: 每次只能改变一个字母。 变换过程中的中间单词必须在字典中出现。 注意事项 如果没有转换序列则返回0。 所有单词具有相同的长度。 所有单词都只包含小写字母。 样例 给出数据如下: start = “hit” end = “cog” dict = [“hot”,”dot”,”dog”,

2017-07-18 20:37:54 522

原创 编辑距离 -LintCode

给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。 你总共三种操作方法:插入一个字符删除一个字符替换一个字符样例 给出 work1=”mart” 和 work2=”karma” 返回 3#ifndef C119_H#define C119_H#include&lt;iostream&gt;#include&lt;string&g...

2017-07-18 15:58:09 277

原创 不同的子序列-LintCode

给出字符串S和字符串T,计算S的不同的子序列中T出现的个数。 子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响。(比如,“ACE”是“ABCDE”的子序列字符串,而“AEC”不是)。 样例: 给出S = “rabbbit”, T = “rabbit” 返回 3思想: dp[i][j]表示字符串S的前i个字符中,T的前j个字符出现...

2017-07-18 15:30:34 189

原创 跳跃游戏 II-LintCode

给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。    你的目标是使用最少的跳跃次数到达数组的最后一个位置。 样例: 给出数组A = [2,3,1,1,4],最少到达数组最后一个位置的跳跃次数是2(从数组下标0跳一步到数组下标1,然后跳3步到数组的最后一个位置,一共跳跃2次)#ifndef C117_H#define C117_H

2017-07-18 14:21:06 303

原创 跳跃游戏-LintCode

给出一个非负整数数组,你最初定位在数组的第一个位置。    数组中的每个元素代表你在那个位置可以跳跃的最大长度。     判断你是否能到达数组的最后一个位置。 样例: A = [2,3,1,1,4],返回 true. A = [3,2,1,0,4],返回 false.#ifndef C116_H#define C116_H#include<iostream>#include<vect

2017-07-18 09:02:08 174

原创 不同的路径 II -LintCode

“不同的路径” 的跟进问题: 现在考虑网格中有障碍物,那样将会有多少条不同的路径? 网格中的障碍和空位置分别用 1 和 0 来表示。 样例 如下所示在3x3的网格中有一个障碍物:[ [0,0,0], [0,1,0], [0,0,0] ] 一共有2条不同的路径从左上角到右下角。#ifndef C115_H#define C115_H#include<iostream>

2017-07-17 15:59:05 230

原创 不同的路径 -LintCode

有一个机器人的位于一个 m × n 个网格左上角。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。 问有多少条不同的路径? 样例 给出 m = 3 和 n = 3, 返回 6. 给出 m = 4 和 n = 5, 返回 35.#ifndef C114_H#define C114_H#include<iostream>#include<vector>using

2017-07-17 15:25:09 158

原创 删除排序链表中的重复数字 II -LintCode

给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。 样例: 给出 1->2->3->3->4->4->5->null,返回 1->2->5->null 给出 1->1->1->2->3->null,返回 2->3->null#ifndef C113_H#define C113_H#include<iostream>using namespace std;class Li

2017-07-17 10:53:38 142

原创 删除排序链表中的重复元素-LintCode

给定一个排序链表,删除所有重复的元素每个元素只留下一个。 样例: 给出 1->1->2->null,返回 1->2->null 给出 1->1->2->3->3->null,返回 1->2->3->null#ifndef C112_H#define C112_H#include<iostream>using namespace std;class ListNode{public:

2017-07-17 10:16:50 123

原创 爬楼梯-LintCode

假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 样例: 比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法 返回 3 令m[i]表示需要i步才能到达顶部,则 m[i]=m[i-1]+m[i-2]#ifndef C111_H#define C111_H#include<iostream>#include<vector

2017-07-17 09:36:17 374

原创 最小路径和-LintCode

给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。 动态转换方程: dp[i][j]=min(dp[i−1][j],dp[i][j−1])+dp[i][j]dp[i][j]=min(dp[i−1][j],dp[i][j−1])+dp[i][j]dp[i][j]=min(dp[i-1][j],dp[i][j-1])+dp[i][j]#ifndef C110_...

2017-07-17 09:33:32 215

原创 数字三角形-LintCode

给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。 样例 比如,给出下列数字三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。#ifndef C109_H#define C109_H#include&...

2017-07-14 10:57:16 269

原创 分割回文串 II-LintCode

给定一个字符串s,将s分割成一些子串,使每个子串都是回文。 返回s符合要求的的最少分割次数。样例 比如,给出字符串s = “aab”, 返回 1, 因为进行一次分割可以将字符串s分割成[“aa”,”b”]这样两个回文子串思想:动态规划 令len 字符串的长度,并开辟新的数组nums[len],其中nums[i]表示从0到位置i表示的字符串,它的最小切割数。初始化val[i]=i,表...

2017-07-14 10:05:05 612

原创 单词切分-LintCode

给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。 样例: 给出 s = “lintcode” dict = [“lint”,”code”] 返回 true 因为”lintcode”可以被空格切分成”lint code”#ifndef C107_H#define C107_H#include<iostream>#include<unordere

2017-07-13 14:53:46 310

原创 排序列表转换为二分查找树-LintCode

给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 样例: #ifndef C106_H#define C106_H#include<iostream>using namespace std;class TreeNode{public: int val; TreeNode *left, *right; TreeNode(int val){

2017-07-13 09:15:04 184

原创 复制带随机指针的链表-LintCode

给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点。 返回一个深拷贝的链表。 #ifndef C105_H#define C105_H#include<iostream>using namespace std;struct RandomListNode{ int label; RandomListNode *next, *random;

2017-07-12 16:17:41 177

原创 合并k个排序链表-LintCode

合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。 样例: 给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null .h#ifndef C104_H#define C104_H#include<iostream>#include<vector>using namespace std;class ListNode{p

2017-07-12 15:11:32 216

原创 带环链表 II-LintCode

给定一个链表,如果链表中存在环,则返回到链表中环的起始节点的值,如果没有环,返回null。 样例 给出 -21->10->4->5, tail connects to node index 1,返回10#ifndef C103_H#define C103_H#include<iostream>using namespace std;class ListNode{public:

2017-07-12 10:54:17 236

原创 带环链表-LintCode

给定一个链表,判断它是否有环。 思想: 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。#ifndef C102_H#define C102_H#include<iostream>using namespace std;class ListNode{publi

2017-07-12 10:13:48 156

原创 删除排序数组中的重复数字-LintCode

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。 样例: 给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。#ifndef C100_H#define C100_H#include<iostream>#include<vector>using names

2017-07-12 09:26:35 291

原创 重排链表-LintCode

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。 给定一个单链表L: L0→L1→…→Ln-1→Ln, 重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→… 必须在不改变节点值的情况下进行原地操作。 样例: 给出链表 1->2->3->4->null,重新排列后为1->4

2017-07-12 09:02:58 326

原创 链表排序-LintCode

在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。 样例: 给出 1->3->2->null,给它排序变成 1->2->3->null.#ifndef C98_H#define C98_H#include<iostream>using namespace std;class ListNode{public: int val; ListNode *ne

2017-07-11 16:52:48 224

原创 二叉树的最大深度-LintCode

给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的距离。 样例 给出一棵如下的二叉树: 思路: 递归地求二叉树的最大深度,节点的最大深度等于左右子树最大深度的最大值加一。#ifndef C97_H#define C97_H#include&lt;iostream&gt;using namespace std;class TreeNode{public...

2017-07-11 15:27:24 182

原创 链表划分-LintCode

给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。 你应该保留两部分内链表节点原有的相对顺序。 样例: 给定链表 1->4->3->2->5->2->null,并且 x=3 返回 1->2->2->4->3->5->null#ifndef C96_H#define C96_H#include<iostream>using namespace std;cla

2017-07-10 15:20:22 182

原创 验证二叉查找树-LintCode

给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为: 节点的左子树中的值要严格小于该节点的值。 节点的右子树中的值要严格大于该节点的值。 左右子树也必须是二叉查找树。 一个节点的树也是二叉查找树。 样例 一个例子: #ifndef C95_H#define C95_H#include<iostream>#include<vector>using na

2017-07-07 15:59:04 187

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除