自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 两数和-输入已排序的数组-LintCode

给定一个已经按升序排列的数组,找到两个数使他们加起来的和等于特定数。 函数应该返回这两个数的下标,index1必须小于index2。注意返回的值不是 0-based。注意事项: 你可以假设每个输入刚好只有一个答案样例: 给定数组为 [2,7,11,15] ,target = 9 返回 [1,2]#ifndef C608_H#define C608_H#include<iostream>

2017-11-08 15:27:13 226

原创 最大整除子集-LintCode

给一个由 无重复的正整数 组成的集合,找出满足任意两个元素 (Si, Sj) 都有 Si % Sj = 0 或 Sj % Si = 0 成立的最大子集注意事项: 如果有多种解集,返回其中任意一个。样例: 给一个数组 [1,2,3],返回 [1,2] 或 [1,3] 给一个数组 [1,2,4,8],返回 [1,2,4,8]#ifndef C603_H#define C603_H#includ

2017-11-08 14:33:30 923

原创 单词拆分II-LintCode

给一字串s和单词的字典dict,在字串中增加空格来构建一个句子,并且所有单词都来自字典。 返回所有有可能的句子。样例: 给一字串lintcode,字典为[“de”, “ding”, “co”, “code”, “lint”] 则结果为[“lint code”, “lint co de”]。第一次代码,TLE#ifndef C582_H#define C582_H#include<iostr

2017-11-07 16:38:38 650

原创 划分和相等的子集-LintCode

给一 只含有正整数的非空数组, 找到这个数组是否可以划分为 两个 元素和相等的子集。注意事项: 所有数组元素不超过100. 数组大小不超过200.样例: 给一数组 [1, 5, 11, 5] , 返回 true , 两个子集:[1, 5, 5], [11] 给一数组 [1, 2, 3, 9] , 返回 false思路: 动态规划,对于数组nums,判断奇偶性,若为奇数,肯定不可能分成两

2017-11-06 19:49:59 3325

原创 表达式展开-LintCode

给出一个表达式 s,此表达式包括数字,字母以及方括号。在方括号前的数字表示方括号内容的重复次数(括号内的内容可以是字符串或另一个表达式),请将这个表达式展开成一个字符串。样例: S = abc3[a] 返回 abcaaa S = 3[abc] 返回 abcabcabc S = 4[ac]dy 返回 acacacacdy S = 3[2[ad]3[pf]]xyz 返回 adadpfpfpfad

2017-11-06 11:21:04 1845

原创 背包问题 VI-LintCode

给出一个都是正整数的数组 nums,其中没有重复的数。从中找出所有的和为 target 的组合个数。注意事项: 一个数可以在组合中出现多次。 数的顺序不同则会被认为是不同的组合。样例: 给出 nums = [1, 2, 4], target = 4 可能的所有组合有:[1, 1, 1, 1][1, 1, 2][1, 2, 1][2, 1, 1][2, 2][4]返回 6思路: 动

2017-11-06 10:30:58 376

原创 寻找丢失的数 II-LintCode

给一个由 1 - n 的整数随机组成的一个字符串序列,其中丢失了一个整数,请找到它。注意事项: n <= 30样例: 给出 n = 20, str = 19201234567891011121314151618 丢失的数是 17 ,返回这个数。思路: 回溯法,进行判断时,构建visited[],来存放数字是否出现过, 若当前的位置小于字符串的大小, 判断此位置,若为‘0’,返回-1;

2017-11-04 15:37:20 609

原创 打劫房屋 III-LintCode

在上次打劫完一条街道之后和一圈房屋之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子组成的区域比较奇怪,聪明的窃贼考察地形之后,发现这次的地形是一颗二叉树。与前两次偷窃相似的是每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且当相邻的两个房子同一天被打劫时,该系统会自动报警。算一算,如果今晚去打劫,你最多可以得到多少钱,当然在不触动报警装置的情况下。样

2017-11-04 12:19:56 184

原创 打劫房屋 II-LintCode

在上次打劫完一条街道之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子围成了一个圈,这就意味着第一间房子和最后一间房子是挨着的。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,你最多可以得到多少钱 在不触动报警装置的情况下。注意

2017-11-03 21:26:49 241

原创 各位相加-LintCode

给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。样例: 给出 num = 38。 相加的过程如下:3 + 8 = 11,1 + 1 = 2。因为 2 只剩下一个数字,所以返回 2。挑战 : 你可以不用任何的循环或者递归算法,在 O(1) 的时间内解决这个问题么?思路: 对于数字abcd,其值为a*1000+b*100+c*10+d, 即abcd=(a+b+c+

2017-11-03 18:52:35 483

原创 移动零-LintCode

给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序注意事项 1.必须在原数组上操作 2.最小化操作数样例: 给出 nums = [0, 1, 0, 3, 12], 调用函数之后, nums = [1, 3, 12, 0, 0].#ifndef C539_H#define C539_H#include<iostream>#include<vector>u

2017-11-02 19:13:10 192

原创 创建最大数-LintCode

给出两个长度分别是m和n的数组来表示两个大整数,数组的每个元素都是数字0-9。从这两个数组当中选出k个数字来创建一个最大数,其中k满足k <= m + n。选出来的数字在创建的最大数里面的位置必须和在原数组内的相对位置一致。返回k个数的数组。你应该尽可能的去优化算法的时间复杂度和空间复杂度。样例: 给出 nums1 = [3, 4, 6, 5], nums2 = [9, 1, 2, 5, 8, 3

2017-11-02 18:54:30 557

原创 两数组的交 II-LintCode

计算两个数组的交注意事项: 每个元素出现次数得和在数组里一样 答案可以以任意顺序给出样例: nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].挑战 : What if the given array is already sorted? How would you optimize your algorithm? What if nums1’s

2017-11-02 10:27:09 185

原创 两数组的交-LintCode

返回两个数组的交注意事项: Each element in the result must be unique. The result can be in any order.样例: nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].利用set#ifndef C547_H#define C547_H#include<iostream>#includ

2017-11-02 10:07:14 142

原创 逆序对-LintCode

在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。给你一个数组,求出这个数组中逆序对的总数。 概括:如果a[i] > a[j] 且 i < j, a[i] 和 a[j] 构成一个逆序对。样例: 序列 [2, 4, 1, 3, 5] 中,有 3 个逆序对 (2, 1), (4, 1), (4, 3),则返回 3 。思路: 从后向前遍历数组,利用lower_bound找

2017-11-02 08:45:24 299

原创 左填充-LintCode

实现一个leftpad库,如果不知道什么是leftpad可以看样例样例:leftpad("foo", 5)>> " foo"leftpad("foobar", 6)>> "foobar"leftpad("1", 2, "0")>> "01"#ifndef C524_H#define C524_H#include<iostream>#include<string>using names

2017-11-01 15:26:20 292

原创 超级丑数-LintCode

写一个程序来找第 n 个超级丑数。 超级丑数的定义是正整数并且所有的质数因子都在所给定的一个大小为 k 的质数集合内。 比如给你 4 个质数的集合 [2, 7, 13, 19], 那么 [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] 是前 12 个超级丑数。注意事项:1 永远都是超级丑数不管给的质数集合是什么。给你的质数集合已经按照升序排列。0 <

2017-11-01 14:59:24 536

原创 房屋染色 II-LintCode

这里有n个房子在一列直线上,现在我们需要给房屋染色,共有k种颜色。每个房屋染不同的颜色费用也不同,你需要设计一种染色方案使得相邻的房屋颜色不同,并且费用最小。费用通过一个nxk 的矩阵给出,比如cost[0][0]表示房屋0染颜色0的费用,cost[1][2]表示房屋1染颜色2的费用。注意事项: 所有费用都是正整数样例: costs = [[14,2,11],[11,14,5],[14,3,10

2017-11-01 10:31:10 491

原创 房屋染色-LintCode

这里有n个房子在一列直线上,现在我们需要给房屋染色,分别有红色蓝色和绿色。每个房屋染不同的颜色费用也不同,你需要设计一种染色方案使得相邻的房屋颜色不同,并且费用最小。费用通过一个nx3 的矩阵给出,比如cost[0][0]表示房屋0染红色的费用,cost[1][2]表示房屋1染绿色的费用。注意事项: 所有费用都是正整数样例: costs = [[14,2,11],[11,14,5],[14,3,

2017-10-31 10:05:16 321

原创 栅栏染色-LintCode

我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。 必须保证不存在超过2个相邻的柱子颜色相同,求有多少种染色方案。注意事项: n和k都是非负整数样例: n = 3, k = 2, return 6 post 1, post 2, post 3way1 0 0 1 way2 0 1 0way3

2017-10-31 09:06:12 276

原创 完美平方-LintCode

给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, … )使得他们的和等于 n。你需要让平方数的个数最少。样例: 给出 n = 12, 返回 3 因为 12 = 4 + 4 + 4。 给出 n = 13, 返回 2 因为 13 = 4 + 9。思路: 动态规划,状态转换方程为: 若i是完全平方数 dp[i]=1dp[i]=1 其他 dp[i]=min(dp[j]+dp[i−

2017-10-30 18:59:16 234

原创 解码方法-LintCode

有一个消息包含A-Z通过以下规则编码'A' -> 1'B' -> 2...'Z' -> 26现在给你一个加密过后的消息,问有几种解码的方式样例: 给你的消息为12,有两种方式解码 AB(12) 或者 L(12). 所以返回 2。思路: 动态规划,len为s的长度,取dp[],大小为len+1,且dp[0]=1,dp[1]=1; 处理len为1时的情况,s为”0”,返回0,其他返回1;

2017-10-30 18:55:51 161

原创 最大矩形-LintCode

给你一个二维矩阵,权值为False和True,找到一个最大的矩形,使得里面的值全部为True,输出它的面积样例: 给你一个矩阵如下[ [1, 1, 0, 0, 1], [0, 1, 0, 0, 1], [0, 0, 1, 1, 1], [0, 0, 1, 1, 1], [0, 0, 0, 0, 1]]输出6思路: 参考题目“直方图最大矩形覆盖”,将矩阵的每一行当做是直方图来

2017-10-30 10:23:35 337

原创 摆动排序-LintCode

给你一个没有排序的数组,请将原数组就地重新排列满足如下性质 nums[0] <= nums[1] >= nums[2] <= nums[3]….注意事项: 请就地排序数组,也就是不需要额外数组样例: 给出数组为 nums = [3, 5, 2, 1, 6, 4] 一种输出方案为 [1, 6, 2, 5, 3, 4]#ifndef C508_H#define C508_H#include<i

2017-10-30 09:30:34 242

原创 摆动排序 II-LintCode

给你一个数组nums,将它重排列如下形式 nums[0] < nums[1] > nums[2] < nums[3]….注意事项: 你可以认为每个输入都有合法解样例: 给出 nums = [1, 5, 1, 1, 6, 4],一种方案为 [1, 4, 1, 5, 1, 6]. 给出 nums = [1, 3, 2, 2, 3, 1],一种方案为 [2, 3, 1, 3, 1, 2].思路:

2017-10-29 19:28:28 345

原创 交换链表当中两个节点-LintCode

给你一个链表以及两个权值v1和v2,交换链表中权值为v1和v2的这两个节点。保证链表中节点权值各不相同,如果没有找到对应节点,那么什么也不用做。注意事项: 你需要交换两个节点而不是改变节点的权值样例: 给出链表 1->2->3->4->null ,以及 v1 = 2 , v2 = 4 返回结果 1->4->3->2->null。#ifndef C511_H#define C511_H#in

2017-10-27 09:34:40 1026

原创 丑数-LintCode

写一个程序来检测一个整数是不是丑数。 丑数的定义是,只包含质因子 2, 3, 5 的正整数。比如 6, 8 就是丑数,但是 14 不是丑数以为他包含了质因子 7。注意事项: 可以认为 1 是一个特殊的丑数。样例: 给出 num = 8,返回 true。 给出 num = 14,返回 false。#ifndef C517_H#define C517_H#include<iostream>

2017-10-27 08:59:24 206

原创 玩具工厂-LintCode

工厂模式是一种常见的设计模式。请实现一个玩具工厂 ToyFactory 用来产生不同的玩具类。可以假设只有猫和狗两种玩具。样例ToyFactory tf = ToyFactory();Toy toy = tf.getToy('Dog');toy.talk(); >> Wowtoy = tf.getToy('Cat');toy.talk();>> Meow#ifndef C496_H#de

2017-10-21 10:19:46 1572

原创 回文数-LintCode

判断一个正整数是不是回文数。 回文数的定义是,将这个数反转之后,得到的数仍然是同一个数。注意事项: 给的数一定保证是32位正整数,但是反转之后的数就未必了。样例: 11, 121, 1, 12321 这些是回文数。 23, 32, 1232 这些不是回文数。#ifndef C491_H#define C491_H#include<iostream>#include<string>us

2017-10-21 09:56:30 242

原创 快乐数-LintCode

写一个算法来判断一个数是不是”快乐数”。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。样例: 19 就是一个快乐数。1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1001^2 + 0^2 + 0^2 = 1思路:

2017-10-21 09:49:11 206

原创 二叉树的所有路径-LintCode

给一棵二叉树,找出从根节点到叶子节点的所有路径。样例: 给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]#ifndef C480_H#define C480_h#include<iostream>#include<vector>#include<string>using namespace s

2017-10-20 21:19:49 318

原创 被围绕的区域-LintCode

给一个二维的矩阵,包含 ‘X’ 和 ‘O’, 找到所有被 ‘X’ 围绕的区域,并用 ‘X’ 填充满。样例: 给出二维矩阵:X X X XX O O XX X O XX O X X把被 ‘X’ 围绕的区域填充之后变为:X X X XX X X XX X X XX O X X思路 递归地求相邻近的“O”,并将位置保存在map中。由于只要“O”在边界便不会被“...

2017-10-20 20:48:51 301

原创 单词的添加与查找-LintCode

设计一个包含下面两个操作的数据结构:addWord(word), search(word) addWord(word)会在数据结构中添加一个单词。而search(word)则支持普通的单词查询或是只包含.和a-z的简易正则表达式的查询。 一个 . 可以代表一个任何的字母。注意事项: 你可以假设所有的单词都只包含小写字母 a-z。样例:addWord("bad")addWord("dad")

2017-10-20 18:41:46 315

原创 等价二叉树-LintCode

检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。样例: 1 1 / \ / \ 2 2 and 2 2 / /4 4就是两棵等价的二叉树。 1 1 / \

2017-10-20 14:36:23 340

原创 整数排序 II -LintCode

给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。样例: 给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。#ifndef C464_H#define C464_H#include<iostream>#include<vector>using namespace std;class Solutio

2017-10-20 14:22:58 159

原创 经典二分查找问题-LintCode

在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回-1。样例: 给出数组 [1, 2, 2, 4, 5, 5]. 对于 target = 2, 返回 1 或者 2. 对于 target = 5, 返回 4 或者 5. 对于 target = 6, 返回 -1.挑战: O(logn) 的时间#ifndef C457_H#define C457_H#include<ios

2017-10-20 09:07:06 243

原创 整数排序-LintCode

给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2n2) 的排序算法。样例: 对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。#ifndef C463_H#define C463_H#include<iostream>#include<vector>#include<algorithm>using namespace std

2017-10-20 08:52:28 205

原创 和大于S的最小子数组-LintCode

给定一个由 n 个正整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组。如果无解,则返回 -1。样例: 给定数组 [2,3,1,2,4,3] 和 s = 7, 子数组 [4,3] 是该条件下的最小长度子数组。挑战 : 如果你已经完成了O(n)时间复杂度的编程,请再试试 O(n log n)时间复杂度。#ifndef C406_H#define C406_H#i

2017-10-19 20:54:28 396

原创 将二叉树拆成链表-LintCode

将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。注意事项: 不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。样例: 1 \ 1 2 / \ \ 2 5 => 3 / \

2017-10-19 20:05:55 213

原创 删除链表中的元素-LintCode

删除链表中等于给定值val的所有节点。样例: 给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。#ifndef C452_H#define C452_H#include<iostream>using namespace std;class ListNode{public: int val; List

2017-10-19 17:16:30 147

空空如也

空空如也

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

TA关注的人

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