摘要: 还是觉得自己在算法这块太弱鸡了 不多废话开刷吧,LeetCode与算法导论相辅相成双管齐下,期望能填上算法这个坑 解法没意外都是用Python2.7 由于LeetCode有提供Top Solution,看到有不错的也会写下自己的见解 2016.12 ps.发现leetcode上不少题目还是收费的,看 阅读全文
posted @ 2016-12-23 22:54 三人木君 阅读(720) 评论(0) 推荐(0) 编辑
摘要: https://leetcode.com/problems/split-linked-list-in-parts/ k>=length, 每个部分有且仅有一个,剩下k-length个部分都是空 k<length,每个部分至少有length/k个,那么剩下的length%k个就要给每个部分匀一个 最终 阅读全文
posted @ 2018-12-21 12:45 三人木君 阅读(196) 评论(0) 推荐(0) 编辑
摘要: https://leetcode.com/problems/rotate-list/ 观察到:倒数第k%length个节点就是新头节点,新头节点的前一个点就是新尾节点 corner case:当k % length = 0的时候,rotate之后还是和原链表一样,故无需变换 阅读全文
posted @ 2018-12-21 11:58 三人木君 阅读(143) 评论(0) 推荐(0) 编辑
摘要: Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot makes a circle, which means it moves back to the or 阅读全文
posted @ 2018-03-19 12:05 三人木君 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 给一整数数组, 用当前元素之后数组中的最大元素来替换当前元素(右侧的最大元素). 因为最后一个元素的右边没有元素了, 所以用 -1 来替换这个值. 举个例子, 如果数组为 [16,17,4,3,5,2], 那么它就需要修改为 [17,5,5,5,2,-1]. 样例 给出数组 nums = [16,1 阅读全文
posted @ 2018-02-12 11:11 三人木君 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 样例 给出"abAcD",一个可能的答案为"acbAD" 给出"abAcD",一个可能的答案为"acbAD" 给出"abAcD",一个可能的答案为"acbAD" 挑战 在原地扫描一遍完成 上一个无脑解 static bool cmp(const char &a, const char &b) { r 阅读全文
posted @ 2018-01-21 01:02 三人木君 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 给你一个 n 个整数的序列 a1,a2,...,an,一个 132 模式是对于一个子串 ai,aj,ak,满足 i< j < k 和 ai < ak < aj。设计一个算法来检查输入的这 n 个整数的序列中是否存在132模式。n 会小于 20,000。 样例 给你序列 nums = [1,2,3,4 阅读全文
posted @ 2018-01-21 00:37 三人木君 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。 样例 给出数组[4, 5, 1, 2, 3], 返回 3 给出数组[7, 9, 4, 5],返回 5 给出数组[4, 5, 1, 2, 3], 返回 3 给出数组[7, 9 阅读全文
posted @ 2018-01-18 23:40 三人木君 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大。输出答案时,请分别返回第一个数字和最后一个数字的下标。(如果两个相同的答案,请返回其中任意一个) 样例 给定 [-3, 1, 3, -3, 4], 返回[1,4]. 想清楚这个问题这道题就差不多有解了:“什么时候更新start(第一个数字 阅读全文
posted @ 2018-01-18 11:56 三人木君 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 给定一个包含 n 个整数的排序数组,找出给定目标值 target的起始和结束位置。 如果目标值不在数组中,则返回[-1, -1] 样例 给出[5, 7, 7, 8, 8, 10]和目标值target=8, 返回[3, 4] 给出[5, 7, 7, 8, 8, 10]和目标值target=8, 返回[ 阅读全文
posted @ 2018-01-17 10:26 三人木君 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 给定一个由 n 个正整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组。如果无解,则返回 -1。 样例 给定数组 [2,3,1,2,4,3] 和 s = 7, 子数组 [4,3] 是该条件下的最小长度子数组。 挑战 如果你已经完成了O(n)时间复杂度的编程,请再试试 阅读全文
posted @ 2018-01-16 23:50 三人木君 阅读(196) 评论(0) 推荐(0) 编辑
摘要: Given an array of non-negative integers. Our task is to find minimum number of elements such that their sum should be greater than the sum of rest of 阅读全文
posted @ 2018-01-16 11:02 三人木君 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 给定一个旋转排序数组,在原地恢复其排序。 说明 什么是旋转数组? 比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3] 什么是旋转数组? 比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4] 阅读全文
posted @ 2018-01-08 05:37 三人木君 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。 你可以假设只有一组答案。 样例 给出 numbers = [2, 7, 11, 15], target 阅读全文
posted @ 2018-01-08 01:33 三人木君 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 跟进“搜索旋转排序数组”,假如有重复元素又将如何? 是否会影响运行时间复杂度? 如何影响? 为何会影响? 写出一个函数判断给定的目标值是否出现在数组中。 样例 给出[3,4,4,5,7,0,1,2]和target=4,返回 true 发现lintcode有一点不好就是这种O(n)的解法也能给过 1 阅读全文
posted @ 2018-01-07 05:18 三人木君 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。 你可以假设在数组中无重复元素。 样例 [1,3,5,6],5 → 2 [1,3,5,6],2 → 1 [1,3,5,6], 7 → 4 [1,3,5,6],0 → 0 典型的二分法应用,没什么 阅读全文
posted @ 2018-01-07 04:45 三人木君 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2)。给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。 你可以假设数组中不存在重复的元素。 样例 给出[4, 5, 1, 2, 3]和target=1,返回 阅读全文
posted @ 2018-01-07 04:34 三人木君 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 跟进“删除重复数字”: 如果可以允许出现两次重复将如何处理? 在丑的不行的原基础代码上加了个count 阅读全文
posted @ 2018-01-06 10:47 三人木君 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。) 注意事项 time 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上 阅读全文
posted @ 2018-01-06 07:47 三人木君 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。 元素的顺序可以改变,并且对新的数组不会有影响。 样例 给出一个数组 [0,4,4,0,0,2,4,4],和值 4 返回 4 并且4个元素的新数组为[0,0,0,2] 没什么好说的,用iterator直接过 1 int removeE 阅读全文
posted @ 2018-01-06 07:01 三人木君 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得: 所有小于k的元素移到左边 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。 注意事项 你应该真正的划分数组 nums,而不仅仅只是计算比 k  阅读全文
posted @ 2018-01-06 06:53 三人木君 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外 阅读全文
posted @ 2018-01-05 12:36 三人木君 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。 该数字按照大小进行排列,最大的数在列表的最前面。 样例 给定 [1,2,3] 表示 123, 返回 [1,2,4]. 给定 [9,9,9] 表示 999, 返回 [1,0,0,0]. 无脑做法是遍历vector算出sum,加1 阅读全文
posted @ 2018-01-05 08:39 三人木君 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 有 N 个小孩站成一列。每个小孩有一个评级。 按照以下要求,给小孩分糖果: 每个小孩至少得到一颗糖果。 评级越高的小孩可以比他相邻的两个小孩得到更多的糖果。 每个小孩至少得到一颗糖果。 评级越高的小孩可以比他相邻的两个小孩得到更多的糖果。 需最少准备多少糖果? 样例 给定评级 = [1, 2], 返 阅读全文
posted @ 2018-01-05 08:25 三人木君 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。 给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0 阅读全文
posted @ 2018-01-05 07:31 三人木君 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序 注意事项 1.必须在原数组上操作2.最小化操作数 1.必须在原数组上操作2.最小化操作数 1.必须在原数组上操作2.最小化操作数 样例 给出 nums = [0, 1, 0, 3, 12], 调用函数之后, num 阅读全文
posted @ 2018-01-05 07:16 三人木君 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的距离。 样例 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最大深度为3. 很经典的题目,递归求解 1 int maxDepth(TreeNode *root) { 2 // write your cod 阅读全文
posted @ 2018-01-05 06:08 三人木君 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 给定一个未排序的整数数组,找出最长连续序列的长度。 说明 要求你的算法复杂度为O(n) 样例 给出数组[100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4],返回所求长度 4 先上一个无脑能AC的 1 int longestConsecutive(vector< 阅读全文
posted @ 2018-01-04 02:34 三人木君 阅读(1095) 评论(0) 推荐(0) 编辑
摘要: 给出一个数组 nums 包含 n + 1 个整数,每个整数是从 1到 n (包括边界),保证至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 注意事项 1.不能修改数组(假设数组只能读)2.只能用额外的O(1)的空间3.时间复杂度小于O(n^2)4.数组中只有一个重复的数,但可能重 阅读全文
posted @ 2018-01-03 12:10 三人木君 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 合并两个排序的整数数组A和B变成一个新的数组。 样例 给出 A = [1, 2, 3, empty, empty], B = [4, 5] 合并之后 A 将变成 [1,2,3,4,5] 看的出来A后面empty的地方是留给AB中较大的数的,问题就在于怎么选出大的数去填这个空 既然AB已经是有序的了, 阅读全文
posted @ 2018-01-03 04:51 三人木君 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 合并两个排序的整数数组A和B变成一个新的数组。 样例 给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6] 先上一个无脑的,可以AC 1 vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) 阅读全文
posted @ 2018-01-03 02:52 三人木君 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 设计一个数据结构实现在平均 O(1) 的复杂度下执行以下所有的操作。 insert(val): 如果这个元素不在set中,则插入。 remove(val): 如果这个元素在set中,则从set中移除。 getRandom: 随机从set中返回一个元素。每一个元素返回的可能性必须相同。 insert( 阅读全文
posted @ 2018-01-03 02:14 三人木君 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 样例 给出数组A = [2,3,1,1,4],最少到达数组最后一个位置的跳跃次数是2(从数组下标0跳一步到数组下标1,然后跳3步到数组的最 阅读全文
posted @ 2018-01-02 15:06 三人木君 阅读(512) 评论(0) 推荐(0) 编辑
摘要: 给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。 我们可以使用整数 0,1 和 2 分别代表红,白,蓝。 注意事项 不能使用代码库中的排序函数来解决这个问题。排序需要在原数组中进行。 不能使用代码库中的排序函数来解决这个问题。排序需 阅读全文
posted @ 2018-01-02 01:43 三人木君 阅读(246) 评论(0) 推荐(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。 时间复杂度 O(n  阅读全文
posted @ 2017-12-31 09:45 三人木君 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你是否能到达数组的最后一个位置。 注意事项 这个问题有两个方法,一个是贪心和 动态规划。 贪心方法时间复杂度为O(N)。 动态规划方法的时间复杂度为为O(n^2)。 我们手动设置小型数据集 阅读全文
posted @ 2017-12-31 05:02 三人木君 阅读(226) 评论(0) 推荐(1) 编辑
摘要: Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. 阅读全文
posted @ 2017-12-31 04:14 三人木君 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。 注意事项 子数组最少包含一个数 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 “44. 最小子数组”的姊妹题,思路一样 1 int maxSubArray(vector 阅读全文
posted @ 2017-12-30 05:38 三人木君 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。 子数组最少包含一个数字 样例 给出数组[1, -1, -2, 1],返回 -3 动态规划 原数组为nums[] 令S[i]为到i为止的最小和 那么S[i]=min{nums[i], nums[i]+S[i-1] } basecase: S 阅读全文
posted @ 2017-12-30 05:33 三人木君 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 给定 n 个非负整数 a1, a2, ..., an, 每个数代表了坐标中的一个点 (i, ai)。画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)和(i, 0)。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。 注意事项 容器不可倾斜。 样例 给出[1,3,2], 最大 阅读全文
posted @ 2017-12-26 05:00 三人木君 阅读(424) 评论(0) 推荐(0) 编辑
摘要: 有一个机器人的位于一个 m × n 个网格左上角。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。 问有多少条不同的路径? 注意事项 n和m均不超过100 样例 给出 m = 3 和 n = 3, 返回 6.给出 m = 4 和 n = 5, 返回 35. 一个比较典型的DP问 阅读全文
posted @ 2017-12-20 09:31 三人木君 阅读(162) 评论(0) 推荐(0) 编辑