自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 判断k个素数之和-LintCode

给两个数字 n 和 k. 我们需要判断 n 是否可以写成 k 个素数的和.注意事项:n <= 10 ^ 9戈德巴赫的猜想样例:给出 n = 10, k = 2返回 true // 10 = 5 + 5给出 n = 2, k = 2返回 false思路: 利用哥德巴赫猜想得出,任何大于2的偶数可以分解为两个质数的和。 由于最小的素数为2,当n<2k时,不可能实现,返回false; 当n

2017-11-30 10:59:28 498

原创 数据流中第一个唯一的数字-LintCode

给一个连续的数据流,写一个函数返回终止数字到达时的第一个唯一数字(包括终止数字),如果在终止数字前无唯一数字或者找不到这个终止数字, 返回 -1.样例: 给一个数据流 [1, 2, 2, 1, 3, 4, 4, 5, 6] 以及一个数字 5, 返回 3 给一个数据流 [1, 2, 2, 1, 3, 4, 4, 5, 6] 以及一个数字 7, 返回 -1思路: 利用set1存放所有出现的数字,q

2017-11-29 14:51:37 570

原创 链表节点计数-LintCode

计算链表中有多少个节点.样例: 给出 1->3->5, 返回 3.#ifndef C466_H#define C466_H#include<iostream>using namespace std;/** Count how many nodes in a linked list.* * Example* Given 1->3->5, return 3.*/class List

2017-11-29 14:38:57 2505

原创 连接两个字符串中的不同字符-LintCode

给出两个字符串, 你需要修改第一个字符串,将所有与第二个字符串中相同的字符删除, 并且第二个字符串中不同的字符与第一个字符串的不同字符连接样例: 给出 s1 = aacdb, s2 = gafd 返回 cbgf 给出 s1 = abcs, s2 = cxzca; 返回 bsxz思路: 利用set,先将s2中的字符存入set1。遍历s1,将不在set1中的字符添加到字符串str中,在set1

2017-11-27 09:13:10 357

原创 验证二叉查找树-LintCode

给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。节点的右子树中的值要严格大于该节点的值。左右子树也必须是二叉查找树。一个节点的树也是二叉查找树。样例: 一个例子: 2 / \1 4 / \ 3 5上述这棵二叉树序列化为 {2,1,4,#,#,3,5}.思路: 对于二叉查找树进行中序遍历,将元素依次存

2017-11-22 16:33:55 194

原创 判断是否为平方数之和-LintCode

给一个整数 c, 你需要判断是否存在两个整数 a 和 b 使得 a^2 + b^2 = c.样例: 给出 n = 5 返回 true // 1 * 1 + 2 * 2 = 5 给出 n = -5 返回 false思路: 构建set包含0*0,1*1,…,c√∗c√\sqrt {c}*\sqrt{c} 利用指针it,遍历set,查找是否有元素等于c-*it, 若存在,返回true#if

2017-11-22 16:07:26 962

原创 C++ tuple 元组合并与排序

#include <tuple>#include <iostream>#include <boost/variant.hpp>using namespace std;auto get_student(int id){ if (id == 0) return make_tuple(3.8, 'A', "Kane"); if (id == 1) r

2017-11-21 20:57:00 2319

原创 阶乘-LintCode

给一个数字 n, 以字符串的形式返回数字的阶乘样例: 给一个数字 n = 20 返回 2432902008176640000思路: 大数阶乘,预先申请数组空间,并用数组表示结果的每一位。 例如: n=2,此时res[0]=1,res[0]*2=2,res[0]=2; n=3,res[0]*3=6(个位数),res[0]=6; n=4,res[0]*4=24,res[0]=4(表示个位)

2017-11-21 11:11:28 361

原创 两数之和 - BST版本-LintCode

给一棵二叉搜索树以及一个整数 n, 在树中找到和为 n 的两个数字注意事项: Without any extra space.样例: 给一棵BST: 4 / \ 2 5 / \1 3以及一个整数 n = 3 返回 [1, 2] 或 [2, 1]思路: 遍历节点,求得节点值与n的差,从根开始寻找值为差的节点是否存在。#ifndef C689_H#define C6

2017-11-21 09:30:29 278

原创 单词表示数字-LintCode

给一个非负整数 n, 用单词打印数字注意事项n <= 2147483647样例: 给出 n = 125 返回 one hundred twenty five思路: 根据n的位数来判断是”billion”,”million”,”thousand”,”hundred”,还是十位数或者个位数。 对于位数较长的数字,递归求解。#ifndef C688_H#define C688_H#inclu

2017-11-21 08:50:54 259

原创 缺少的字符串-LintCode

给出两个字符串,你需要找到缺少的字符串样例: 给一个字符串 str1 = This is an example, 给出另一个字符串 str2 = is example 返回 [“This”, “an”]#ifndef C684_H#define C684_H#include<iostream>#include<vector>#include<string>#include<map>u

2017-11-19 18:50:20 623

原创 缺失的第一个素数-LintCode

给一个整数数组,找到最小的未出现的素数样例: 给一个数组 [2,3,5,7,11,13,17,23,29] 返回 19思路: 若数组第一位不是2,结果一定返回2。 分两种情况: 缺失的数字在数组范围内; 缺失的数字大于数组的最大值。 对于第一种情况,遍历3~数组最大值,找到数组内所有元素都无法整除的数; 若这个数不存在,就是第二种情况,从数组最大值+1开始向后遍历,找到第一个 让数

2017-11-18 20:52:40 821

原创 分割字符串-LintCode

给一个字符串,你可以选择在一个字符或两个相邻字符之后拆分字符串,使字符串由仅一个字符或两个字符组成,输出所有可能的结果样例: 给一个字符串”123” 返回[[“1”,”2”,”3”],[“12”,”3”],[“1”,”23”]]#ifndef C680_H#define C680_H#include<iostream>#include<string>#include<vector>#i

2017-11-17 09:49:41 756

原创 转换成回文串-LintCode

给一个字符串 S, 你可以通过在前面添加字符将其转换为回文串.找到并返回用这种方式转换的最短回文串.样例: 给出 “aacecaaa”, 返回 “aaacecaaa” 给出 “abcd”, 返回 “dcbabcd”思路: 先判断是否是回文串,如果是,直接返回本身。 否则,将字符串的最后一个字符插入到字符串的第一字符前面,在判断是否是回文串, 如果不是,就将字符串倒数第二个字符插入到字符串的

2017-11-16 21:44:37 1009

原创 大岛的数量-LintCode

给一个布尔类型的二维数组, 0 表示海, 1 表示岛。如果两个1是相邻的,那么我们认为他们是同一个岛.我们只考虑 上下左右 相邻. 找到大小在 k 及 k 以上的岛屿的数量样例: 给一个二维数组:[ [1, 1, 0, 0, 0], [0, 1, 0, 0, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1]]给出 K

2017-11-16 21:02:45 293

原创 循环单词-LintCode

The words are same rotate words if rotate the word to the right by loop, and get another. Count how many different rotate word sets in dictionary. E.g. picture and turepic are same rotate words.注意事项:

2017-11-16 14:20:50 315

原创 猜数游戏-LintCode

这里写代码片我们正在玩猜数游戏。 游戏如下: 我从 1 到 n 选择一个数字。 你需要猜我选择了哪个号码。 每次你猜错了,我会告诉你这个数字是高还是低。 你调用一个预定义的接口 guess(int num),它会返回 3 个可能的结果(-1,1或0):样例: n = 10, I pick 4 (but you don’t know) Return 4. Correct !#ifn...

2017-11-15 19:09:23 2221

原创 把二叉搜索树转化成更大的树-LintCode

给定二叉搜索树(BST),将其转换为更大的树,使原始BST上每个节点的值都更改为在原始树中大于等于该节点值得节点值之和(包括该节点)。样例:Given a binary search Tree `{5,2,13}`: 5 / \ 2 13Return the root of new tree

2017-11-15 18:32:53 243

原创 Insert Delete GetRandom O(1)-LintCode

设计一个数据结构实现在平均 O(1) 的复杂度下执行以下所有的操作。insert(val): 如果这个元素不在set中,则插入。remove(val): 如果这个元素在set中,则从set中移除。getRandom: 随机从set中返回一个元素。每一个元素返回的可能性必须相同。样例:// 初始化空集setRandomizedSet randomSet = new RandomizedSet

2017-11-15 10:01:20 235

原创 大整数乘法-LintCode

以字符串的形式给定两个非负整数 num1 和 num2,返回 num1 和 num2 的乘积。样例:num1 和 num2 的长度都小于110。num1 和 num2 都只包含数字 0 - 9。num1 和 num2 都不包含任意前导零。您不能使用任何内置的BigInteger库内方法或直接将输入转换为整数。思路: 将乘法转化为加法。#ifndef C656_H#define C656

2017-11-14 21:31:28 388

原创 大整数加法-LintCode

以字符串的形式给出两个非负整数 num1 和 num2,返回 num1 和 num2 的和。注意事项:num1 和 num2 的长度都小于5100。num1 和 num2 都只包含数字 0-9。num1 和 num2 都不包含任何前导零。您不能使用任何内置的BigInteger库内的方法或直接将输入转换为整数。样例: 给定 num1 = “123”,num2 = “45” 返回 “1

2017-11-14 20:40:08 326

原创 添加运算符-LintCode

给定一个仅包含数字 0 - 9 的字符串和一个目标值,返回在数字之间添加了 二元 运算符(不是一元)+, - 或 * 之后所有能得到目标值的情况。样例:"123", 6 -> ["1+2+3", "1*2*3"] "232", 8 -> ["2*3+2", "2+3*2"]"105", 5 -> ["1*0+5","10-5"]"00", 0 -> ["0+0", "0-0", "0*0"]

2017-11-14 20:05:07 1543

原创 第一个独特字符位置-LintCode

给出一个字符串。找到字符串中第一个不重复的字符然后返回它的下标。如果不存在这样的字符,返回 -1。样例: 给出字符串 s = “lintcode”,返回 0。 给出字符串 s = “lovelintcode”,返回 2。#ifndef C646_H#define C646_H#include<iostream>#include<string>#include<map>using nam

2017-11-14 19:52:55 343

原创 编辑距离 II-LintCode

给你两个字符串 S 和 T, 判断他们是否只差一步编辑。样例: 给你字符串 s = “aDb”, t= “adb” 返回 true#ifndef C640_H#define C640_H#include<iostream>#include<string>using namespace std;class Solution {public: /* * @param s

2017-11-13 10:47:50 351

原创 字符同构-LintCode

给定两个字符串 s 和 t ,确定它们是否是同构的。 两个字符串是同构的如果 s 中的字符可以被替换得到 t。 所有出现的字符必须用另一个字符代替,同时保留字符串的顺序。 没有两个字符可以映射到同一个字符,但一个字符可以映射到自己。注意事项: 你可以假定两个字符串 s 和 t 是一样长度的.样例: 给出 s = “egg”, t= “add”, 返回 true。 给出 s = “foo”,

2017-11-13 09:30:02 331

原创 寻找重复的数-LintCode

给出一个数组 nums 包含 n + 1 个整数,每个整数是从 1 到 n (包括边界),保证至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。注意事项:不能修改数组(假设数组只能读) 只能用额外的O(1)的空间 时间复杂度小于O(n^2) 数组中只有一个重复的数,但可能重复超过一次样例: 给出 nums = [5,5,4,3,2,1],返回 5. 给出 nums =

2017-11-10 15:34:01 1205

原创 二叉树的最大节点-LintCode

在二叉树中寻找值最大的节点并返回。样例: 给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为 3 的节点。#ifndef C632_H#define C632_H#include<iostream>using namespace std;class TreeNode{public: int val;

2017-11-10 09:16:58 425

原创 最长回文串-LintCode

给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。 数据是大小写敏感的,也就是说,”Aa” 并不会被认为是一个回文串。注意事项: 假设字符串的长度不会超过 1010。样例: 给出 s = “abccccdd” 返回 7 一种可以构建出来的最长回文串方案是 “dccaccd”。#ifndef C627_H#define C627_H#include<iostre

2017-11-10 09:00:04 180

原创 青蛙跳-LintCode

一只青蛙正要过河,这条河分成了 x 个单位,每个单位可能存在石头,青蛙可以跳到石头上,但它不能跳进水里。 按照顺序给出石头所在的位置,判断青蛙能否到达最后一块石头所在的位置。刚开始时青蛙在第一块石头上,假设青蛙第一次跳只能跳一个单位的长度。 如果青蛙最后一个跳 k 个单位,那么它下一次只能跳 k - 1 ,k 或者 k + 1 个单位。注意青蛙只能向前跳。注意事: 石头的个数 >= 2并且 <

2017-11-10 08:45:22 946

原创 最大平均值子数组-LintCode

给出一个整数数组,有正有负。找到这样一个子数组,他的长度大于等于 k,且平均值最大。注意事项: 保证数组的大小 >= k样例: 给出 nums = [1, 12, -5, -6, 50, 3], k = 3 返回 15.667 // (-6 + 50 + 3) / 3 = 15.667一刷,超时。#ifndef C617_H#define C671_H#include<vector>#i

2017-11-09 18:47:17 1628

原创 安排课程-LintCode

你需要去上n门九章的课才能获得offer,这些课被标号为 0 到 n-1 。 有一些课程需要“前置课程”,比如如果你要上课程0,你需要先学课程1,我们用一个匹配来表示他们: [0,1]给你课程的总数量和一些前置课程的需求,返回你为了学完所有课程所安排的学习顺序。 可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。样例: 给定 n = 2, prerequi

2017-11-09 14:26:59 436

原创 课程表-LintCode

现在你总共有 n 门课需要选,记为 0 到 n - 1. 一些课程在修之前需要先修另外的一些课程,比如要学习课程 0 你需要先学习课程 1 ,表示为[0,1] 给定n门课以及他们的先决条件,判断是否可能完成所有课程?样例: 给定 n = 2,先决条件为 [[1,0]] 返回 true 给定 n = 2,先决条件为 [[1,0],[0,1]] 返回 false思路: 利用拓扑排序来判断是否存

2017-11-09 11:20:28 370

原创 K个最近的点-LintCode

给定一些 points 和一个 origin,从 points 中找到 k 个离 origin 最近的点。按照距离由小到大返回。如果两个点有相同距离,则按照x值来排序;若x值也相同,就再按照y值排序。样例: 给出 points = [[4,6],[4,7],[4,4],[2,5],[1,1]], origin = [0, 0], k = 3 返回 [[1,1],[2,5],[4,4]]思路:

2017-11-08 17:23:07 497

原创 两数和-输入已排序的数组-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 217

原创 最大整除子集-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 903

原创 单词拆分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 640

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

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

2017-11-06 19:49:59 3306

原创 表达式展开-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 1828

原创 背包问题 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 367

原创 寻找丢失的数 II-LintCode

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

2017-11-04 15:37:20 593

空空如也

空空如也

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

TA关注的人

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