算法作业
楼主再看我一眼
对严重拉低leetcode上easy类型题目的AC率深感抱歉qwq
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
122. Best Time to Buy and Sell Stock II
题目122. Best Time to Buy and Sell Stock II解题思路这道题tag是greedy,但我还没仔细学过贪心算法,就先讲下解题思路。这道题是要保证买入和卖出的差价最大,设买入的下标是buyprice_index,累计最多能赚取max,都初始化为0。根据数组长度分情况讨论, 当长度≤1,返回0; 当长度=2,则看price[2] - price[1]是不是大于0,大于0返原创 2017-09-22 15:16:07 · 187 阅读 · 0 评论 -
566. Reshape the Matrix
题目566. Reshape the Matrix解题思路判断一下reshape后的矩阵里面的元素数量是否与原来一致,如果不一致则返回原矩阵,如果一致则用一个一维数组把原矩阵的元素储存再重新reshape具体代码class Solution { public: vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r原创 2017-09-21 23:48:38 · 157 阅读 · 0 评论 -
561. Array Partition I
题目561. Array Partition I解题思路给一串数字然后对其两两组合保证其组合的最小数字之和最大。 很明显最后的sum受到组合的min数字的影响,因此要对这串数字进行排序,保证按序组合才能保证获得的数字之和最大。具体代码class Solution { public: void swap(vector<int>& nums, int a, int b) { i原创 2017-09-21 21:30:29 · 167 阅读 · 0 评论 -
557. Reverse Words in a String III
题目557. Reverse Words in a String III解题思路遇到空格就把之前的单词反转;到结尾的时候也要做一次反转具体代码class Solution { public: void swap(string &s, int start, int end) { while (start < end) { char tmp = s[sta原创 2017-10-08 21:38:49 · 198 阅读 · 0 评论 -
413.Arithmetic Slices
题目Arithmetic Slices计网实验的教室没开空调热到我上leetcode做题解暑qaq解题思路这道题也是动态规划的(动态规划的题目好多简单来说就是给出一串数字有多少组“3个数字以上”且“间隔相同”的数字。我的思路就是遍历,假设第i个数字和前面2个数字(即第i-1、i-2个数字)间隔相同,那么说明他们符合条件,这时还要再看一下第i-2个数字之前是否存在与第i-2个元素连续的数字使得第k~i原创 2017-09-19 12:24:39 · 392 阅读 · 0 评论 -
617. Merge Two Binary Trees
题目 Merge Two Binary Trees解题思路这道题目的思路是:把两个二叉树合并,同个位置的结点如果二叉树t1和二叉树t2同时存在,则二者相加;如果其中一方二叉树不存在则该节点的数字等于另一方二叉树;若两者都不存在该结点则不管它。思路简单清晰没有奇奇怪怪的坑,但用c++写不熟练的话可能会在指针方面卡到各种各样的bug(比如说我太久没碰c++了QAQ具体代码我是方法是先复制其中一个二叉树,原创 2017-09-10 21:10:50 · 217 阅读 · 0 评论 -
657. Judge Route Circle
题目Judge Route Circle解题思路有2种方法: 一种是左走横坐标-1右走+1,竖坐标同理,最后判断横竖坐标是否都为0; 第二种是计算L与R、U与D是不是数量相同。2种方法的方法应该说是同一种思路,只不过过程不一样,我用c++选择第一种相对比较容易的方法实现。具体代码class Solution { public: bool judgeCircle(string moves)原创 2017-09-10 11:31:32 · 194 阅读 · 0 评论 -
461. Hamming Distance
题目Hamming Distance-Leetcode解题思路这道题就是要比较2个数字二进制形式有多少位不同,一开始想用循环解决,后来突然发现这题目不就是位运算题目嘛~具体代码class Solution { public: int hammingDistance(int x, int y) { int diff = x ^ y; int counter =原创 2017-09-10 10:58:48 · 149 阅读 · 0 评论 -
338. Counting Bits
题目338. Counting Bits解题思路把自然数和对应的二进制数对应起来: 自然数 二进制 bit 0 0 0 1 1 1 2 10 1 3 11 2 4 100 1 5 101 2 6 110 2 7 111 3 8 1000 1 9 1001 2 10原创 2017-09-18 13:26:12 · 372 阅读 · 0 评论 -
485. Max Consecutive Ones
题目485. Max Consecutive Ones解题思路用continus来判断数字1是否连续并记录一个连续1的长度,遇到0后与之前记录的最大长度max比较具体代码class Solution { public: int findMaxConsecutiveOnes(vector<int>& nums) { int max = 0, continus = 0;原创 2017-09-22 00:06:19 · 259 阅读 · 0 评论 -
合并两个已排序链表
题目109. Convert Sorted List to Binary Search Tree解题思路注意节点是否为空节点,根据保留其中一个链表的当前节点的前一个结点的指针,来对后面的结点进行插入。具体代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *n原创 2017-10-29 23:02:30 · 187 阅读 · 0 评论 -
121. Best Time to Buy and Sell Stock
发现这道题和122. Best Time to Buy and Sell Stock II这两道题都在之前做了,不过121这道题还没有写博客,就重新做了一遍。 题目 121. Best Time to Buy and Sell Stock 解题思路 题目就是问一组数字中前后两个下标为i和j的两个数字(i > j)的差(prices[i]-prices[j])最大 如果是用两个嵌套循环去做原创 2018-01-13 19:12:37 · 144 阅读 · 0 评论 -
74. Search a 2D Matrix
题目 74. Search a 2D Matrix 解题思路 这道题本质就是二分搜索法=-= 首先给出的m*n矩阵是从上而下从左到右的递增,也可以看作是一个递增的长度为m*n一维数组,通过二分搜索找到目标数字 具体代码 class Solution { public: bool searchMatrix(vectorvectorint>>& matrix, int target原创 2018-01-13 18:42:53 · 161 阅读 · 0 评论 -
63. Unique Paths II
题目 63. Unique Paths II 解题思路 这道题比Unique Paths的操作多了一个要判断是否有障碍,即格子是否为1 如果是最上边或最左边格子,那么第一个数字为1的格子之前的所有格子路径数量都为1,其他的包括第一个数字为1的格子以及之后的格子,路径数量都为0。 如果不是最上边或最左边格子, 如果该格子是障碍,则跳过 如果该格子不是障碍,该格子的当前路径数量等于它上边和原创 2018-01-13 18:11:58 · 141 阅读 · 0 评论 -
62. Unique Paths
标题 62. Unique Paths 解题思路 题目问从左上角走到右下角,只有右或下两种走法的情况下,有多少种路径可走。 很明显是动态规划的题目,从左上角走到当前的格子的路径数量等于从左上角走到当前左边格子的路径数量加上从左上角走到当前上边格子的路径数量之和。 有几种特殊的情况,如当前格子在最上边或最左边,当前格子的路径数均为1。 若是只有一个格子,路径总数量就是1。 具体代码原创 2018-01-13 17:42:15 · 220 阅读 · 0 评论 -
55. Jump Game
考前把老师上课讲的题目稍微回顾一下~ 题目 55. Jump Game 解题思路 题目意思是根据给出的数组,每个数字就是当前位置能走最远的步数。问能否走到最后一个数字。 要想走到最后一个数字,就必须保证走的数字里面没有0,否则走到数字0意味着无法继续走下去。 本题思路也比较简单,设当前位置是下标为i的数字,目前能走最远的下标是reach,更远步数只能由0-reach之间的数字i能达到,原创 2018-01-13 16:48:53 · 147 阅读 · 0 评论 -
算法概论8.3
中文翻译题目 吝啬SAT问题是这样的:给定一组子句(每个子句都是其中文字的析取)和整数k,求一个最多有k个变量为true的满足赋值——如果该赋值存在。证明吝啬SAT是NP-完全问题。 题目思路要证明吝啬SAT是NP-完全问题,需要证明吝啬SAT是NP问题,并将SAT归约到吝啬SAT即可证明过程 证明吝啬SAT是NP问题NP问题是:一个问题的解可以在多项式的时间内被证true或证false。 由原创 2017-12-31 18:13:44 · 199 阅读 · 0 评论 -
445. Add Two Numbers II
题目445. Add Two Numbers II解题思路这道题有点麻烦……题目的意思是,举个栗子:L1:7 -> 2 -> 4 -> 3 L2: 5 -> 6 -> 4从后往前一一对应相加,还需要考虑进位,得到新链表:7 -> 8 -> 0 -> 7题目要求不准把链表反转。我第一个思路是分别计算出2个链表的和,把两个和相加得到的数不断去%10创建新链表。如果链表比较短这个方法是可以原创 2017-10-15 22:00:51 · 168 阅读 · 0 评论 -
581. Shortest Unsorted Continuous Subarray
题目581. Shortest Unsorted Continuous Subarray解题思路题目要求找出最短连续需要排序的数字长度。我的思路是 如果数字长度<= 1,一定不用排序,返回0 长度>1,从第2位数字开始遍历,找到比前一位nums[i-1]大的数字nums[i],初始化第一个需要排序的下标begin=-1,比nums[i]大的数字下标为is_larger=-1:从i - 2开始往前遍历原创 2017-10-23 10:43:26 · 217 阅读 · 0 评论 -
全排列算法递归实现(Permutations)
题目解释全排列(Permutations),对输入的字符排列出所有可能的组合。例如,输入“123”,输出: 123 132 213 231 321 312 题目思路输入一个字符,直接输出就好;输入两个字符,轮流先输出其中一个字符再输出另一个;输入三个字符,轮流输出其中两个字符再输出另外一个字符;……由此可以发现,当n > 1时,我们输入n个字符的时候,可以轮流输出其原创 2017-09-10 09:56:45 · 638 阅读 · 0 评论 -
605. Can Place Flowers
题目605. Can Place Flowers解题思路思路比较简单,找到一个连续3个都是空位的位置即可。需要注意的点: 数组最首端有连续2个位置或最尾端有连续2个位置即可,不需要3个位置 注意花坛实际可容纳花的位置可能大于花的数量 具体代码class Solution { public: bool canPlaceFlowers(vector<int>& flowerbed, int n)原创 2017-09-26 14:24:00 · 217 阅读 · 0 评论 -
35. Search Insert Position
题目35. Search Insert Position解题思路找到合适的位置插进去,有几个位置需要注意: terget等于某个数字或第一次大于某个数字,返回该数字的下标 target比所有数字都大,返回数组长度~ 具体思路class Solution { public: int searchInsert(vector<int>& nums, int target) { if原创 2017-09-24 11:13:03 · 165 阅读 · 0 评论 -
674. Longest Continuous Increasing Subsequence
题目674. Longest Continuous Increasing Subsequence解题思路 长度<2的,返回1 长度≥2的,用一个标记increase记录当前升序数组的长度,直到升序停止,再与先前最长升序数组的长度比较取最大 具体代码class Solution { public: int findLengthOfLCIS(vector<int>& nums) {原创 2017-09-24 09:36:03 · 167 阅读 · 0 评论 -
628. Maximum Product of Three Numbers
题目628. Maximum Product of Three Numbers解题思路看了discuss才AC的……一开始想到直接用快排排序选出前3个最大的数字,但遇到了有负数的情况就WA,然后去看了discuss才知道也要选出最小的两个数字(可能都是负数可以负负得正),最后再比较哪3个乘起来大就选哪个。我的思路缺陷在于没有考虑到有负数的情况和负负得正的定理。具体代码快排大法好……两年死活记不住的快原创 2017-09-23 21:57:58 · 344 阅读 · 0 评论 -
268. Missing Number
题目268. Missing Number解题思路与之前那道题有些相似,也是遍历并让数字归位,因为只有一位数字丢失,假设数组长度为n,数组中的数字在[0,n]之间,如果丢失的数字x范围是0≤x≤n-1,则数组最大的数字n必然无处归位(数组下标最大为n-1),则把n所在位置的数字设为-1,遍历结束后-1所在位置就是没有归位的数字,也就是丢失的数字;如果丢失数字是n是话,那么数组所有数字都归位并且没有-原创 2017-09-23 21:16:29 · 178 阅读 · 0 评论 -
169. Majority Element
题目169. Majority Element解题思路这道题就是求众数,一开始我是用快排排序再返回nums[size/2],但是超时了~所以去discussion看了下大佬的代码,dalao的思路就是给数字投票,相同的投票数++,不同的投票数–,因为题目规定了众数的数量大于size/2,所以结果妥妥的是众数投票数最多。还有一种思路是用映射map,比较简单就不说了。具体代码class Solution原创 2017-09-23 16:10:45 · 199 阅读 · 0 评论 -
167. Two Sum II - Input array is sorted
题目167. Two Sum II - Input array is sorted解题思路设一个指针end从最后一个元素遍历起,设一个指针start从第一个元素开始遍历,当numbers[start]+numbers[end] > target说明end太大了,end–,当numbers[start]+numbers[end] < target说明start太小,start++,直到相等具体代码cl原创 2017-09-23 14:46:11 · 168 阅读 · 0 评论 -
283. Move Zeroes
题目283. Move Zeroes解题思路遍历,记录第一个0的下标i,若后面有数字非0,则两个位置交换。举例子: [0, 1, 0, 3, 12]1:第一个0下标为0,因此:first_zero_index=0,遍历至第2数字非0,与之交换: [1,0, 0, 3, 12]2:第一个0下标为1,因此:first_zero_index=1,遍历至第4数字非0,与之交换: [1,3, 0, 0,原创 2017-09-23 11:43:24 · 167 阅读 · 0 评论 -
448. Find All Numbers Disappeared in an Array
题目448. Find All Numbers Disappeared in an Array解题思路题目描述是给一串长度为n,大小在[1,n]的乱序数字,有的数字出现2次,有的数字出现1次,计算出有多少个数字没出现过。没出现的数字的位置是被出现了2次的数字站了,我的思路是让这些乱序的数字归位,出现1次的数字正常归位,出现2次的数字多出来的一个令其等于-1,最后统计一下-1出现在哪个位置即可。举个栗原创 2017-09-23 09:59:38 · 177 阅读 · 0 评论 -
278. First Bad Version
题目278. First Bad Version解题思路很明显就是二分搜索,但是被溢出坑了很久一直超时qaq 超时的解决方法: 类型转换:long long int mid = ((long long int)left + (long long int)right) / 2; 防溢出代码:int mid = left + (right - left) / 2; (Binary search alg原创 2017-09-24 15:07:19 · 183 阅读 · 0 评论 -
643. Maximum Average Subarray I
题目643. Maximum Average Subarray I解题思路遍历找出连续k个和最大的数字,最后返回和/k即可。这道题目思路简单。具体代码class Solution { public: double findMaxAverage(vector<int>& nums, int k) { double maxsum = 0; for (int i =原创 2017-09-24 16:17:47 · 198 阅读 · 0 评论 -
219. Contains Duplicate II
题目219. Contains Duplicate II解题思路这道题如果用嵌套循环会超时,所以我用了map。思路简单,有2个点需要注意: 当nums为空或k为0的时候一定是false k有可能大于nums数组长度 具体代码class Solution { public: bool containsNearbyDuplicate(vector<int>& nums, int k) {原创 2017-09-26 10:40:01 · 218 阅读 · 0 评论 -
88. Merge Sorted Array
题目88. Merge Sorted Array解题思路用2个指针分别对两个数组同时从后向前遍历,哪个指针指向的数字大,第一个数组尾端的数字就是哪个。举个栗子:nums1: [4 5 6 0 0 0] 3nums2: [1 2 3] 3nums1的指针 p1:2 nums2的指针 p2:2 对nums1从最尾端向前遍历 i = 3 + 3 - 11:nums1[p1] > nums2[p2],原创 2017-09-26 09:18:52 · 163 阅读 · 0 评论 -
303. Range Sum Query - Immutable
题目303. Range Sum Query - Immutable解题思路给出一串数字,要求出任意区间之间数字的和……解题思路比较简单,再加个长度足够数组存储前i个数字的和避免在后面重复计算造成超时。具体代码class NumArray { public: NumArray(vector<int> nums) { if (!nums.empty())// 需要考虑到nums原创 2017-09-18 09:05:20 · 543 阅读 · 0 评论 -
70. Climbing Stairs
题目70. Climbing Stairs解题思路有n级楼梯,每步可爬1/2个阶梯,问有几种走法。仔细一看会发现这道题不就是斐波那契数列吗,然后代码瞬间写好交上去:class Solution { public: int climbStairs(int n) { if (n == 1 || n == 2) return n; retur原创 2017-09-17 22:11:47 · 177 阅读 · 0 评论 -
53. Maximum Subarray(最大子序列)
题目Maximum Subarray老师最近在讲分治算法,这道求最大连续子序列的题目算是分治算法的经典题目之一不过这道题目我做的蛮久的,超时&漏掉一些情况,好在挣扎到最后AC了~解题思路假设有长度为i的序列为[N1, N2, N3, N4, N5, …, Ni] 找出其中和最大的连续子序列,根据分治思想,前i个序列的最大子序列建立在前i-1个序列的最大子序列。当 i > 1时有3种情况需要考虑:原创 2017-09-17 19:45:43 · 200 阅读 · 0 评论 -
27. Remove Element
题目27. Remove Element解题思路和上一篇博客思路是差不多,就是只保留非val的数字即可具体代码class Solution { public: int removeElement(vector<int>& nums, int val) { if (nums.empty()) return 0; int t = 0;原创 2017-09-24 19:30:51 · 159 阅读 · 0 评论 -
26. Remove Duplicates from Sorted Array
题目26. Remove Duplicates from Sorted Array-leetcode解题思路我的思路是,遍历遇到重复的数字就设为-1000000(一个不会出现在数组里的数字),第一个-1000000与其后面第一个不重复的数字进行交换位置,最后-1000000都会排列在数组尾部。我的思路其实有很大的缺陷,非要特定搞一个“不会出现在数组里的数字”,后来又是去看了discuss……还是da原创 2017-09-24 19:17:54 · 164 阅读 · 0 评论 -
119. Pascal's Triangle II
题目119. Pascal’s Triangle II解题思路先去百度一下Pascal’s Triangle是什么玩意,然后可以发现每一行左右两边都有1,中间的数字是上一层数字相加,所以就搞个循环来就行了。(因为思路简单就不多加解释了,多出的时间留着去刷leetcode(逃具体代码class Solution { public: vector<int> getRow(int rowIndex原创 2017-09-24 18:34:20 · 170 阅读 · 0 评论 -
240. Search a 2D Matrix II
题目 240. Search a 2D Matrix II 解题思路 这道题与74. Search a 2D Matrix的不同在于这道题目的矩阵是左上角的数字一定比右下角的大。 这道题我是看discussion的题解做的,先把初始位置定在右上角,这样向下移就是增大,向左移就是减小,即有增大减小两个不同方向。 如果把初始位置定在左上角,向右移和向下移都是增大,即两个方向都是增大,无法确定原创 2018-01-13 20:32:19 · 168 阅读 · 0 评论
分享