leetCode
Amazingren
Do you prefer to sell sugar water for the rest of your life or come with me and change the world?
展开
-
【LeetCode刷题】-C++-简单-108-将有序数组转换成二叉搜索树
Task:思路与代码思路:首先,得明白什么是二叉搜索树:看来一下百度百科二叉搜素数的意思:左子树的值小于根节点的值;右节点的值大于根节点的值;好了那么本题的意思是高度平衡二叉树,意思就是每个节点的左右两个子树的高度差的绝对值不超过1,那完美了,就二分吧,这样就满足不超过一的条件,大概思路:(1)把给定的已经排好序的数组二分,得到中点mid位置;(2)用这个中点当做这个树...原创 2019-06-28 10:47:31 · 495 阅读 · 0 评论 -
【LeetCodes刷题】-C++-简单-35-搜索插入位置
Task:思路:(一) 遍历的方法:(1)首先要进行的还是边界检查,如果给的target比nums[0]还要小,那么就包含在遍历的情况之中,如果比nums[nums.size()-1]还大,那就要单独考虑一下;(2)遍历的过程就是判断和选择的过程,如果当前的nums[i]的值大于等于target的话:a)如果大于的话,就说明target就应该插在这个nums[i]的前面,反过来想就是把...原创 2019-06-16 10:54:25 · 211 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-69-x的平方根
Task:思路:【方法1】内置函数:当然本题的初衷当然不是让这样做了,但是也要知道有一个内置函数可以用!代码:class Solution {public: int mySqrt(int x) { return sqrt(x); }};【方法2】二分查找:思路就是:(1)初始化边界i和j(2)找到中点mid= (i+j) / 2(3)re...原创 2019-06-20 10:58:07 · 214 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-21合并两个有序链表
Task:思路:这里用到了递归的思路:(1)首先还是边界检查:看看两个链表是不是空的,如果其中一个是空的,那就直接返回另外一个有序链表就好了!(2)如果非空的话,那就正常进行:比大小如果L1的value小于L2的,那么就递归的把L2和L1的下一个值进行比较一直进行下去如果L1的value大于L2的,那么就递归的把,L1和L2的下一个value进行比较再一直比较递归下去!代码:...原创 2019-06-15 17:12:04 · 393 阅读 · 3 评论 -
【LeetCode刷题】-C++-简单-20-有效的括号
Task:思路(1)首先还是边界检查,如果是给的空的字符串,那就直接给设定为有效字符串,返回true;(2)然后看看这个字符串能不能被2整除,如果不能被2整除,那就肯定不是有效括号;(3)排除了边界就要来到我们的算法的部分:a) 利用栈,遍历给定的字符串string s;b) 遇到左括号就压栈;c) 遇到右括号首先对这个时候栈是否为空(如果不为空则继续)d) 这个时候指定当前括号...原创 2019-06-15 16:26:21 · 482 阅读 · 0 评论 -
【LeetCode刷题】- 移动零
Task:思路遍历一次数组,将数组中非零元素与此时数组中第一个零元素交换位置。代码:class Solution {public: void moveZeroes(vector<int>& nums) { int k = 0; for( int i = 0; i < nums.size(); i++){ ...原创 2019-06-04 09:09:03 · 211 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-罗马数字转整数
Task:思路:首先最需要注意的就是把题目读懂,弄懂规则,这里最重要的就是下面的两个信息:可以看到需要特殊处理的就是I X 和 C 三个字符,他们分别在自己后面的两个数的左边和右边代表着不同的意思,就拿I和V来说,如果I在V的左边那就是要用V减去I,如果I在V的右边,那就直接是V加上I,剩下的也是一样的规律所以,我们需要注意!过度到算法:上面列出了基本的规则,下面...原创 2019-06-14 16:44:23 · 364 阅读 · 0 评论 -
【LeetCode刷题】- C++-简单-9回文数
Task:思路:边界检查:看题目,首先是边界检测:从例子以及题目要求看出:1.复数是不行的;2.末尾是0的但是这个数字又不是0的数字是不行的(因为末尾是零的回文数字只有它自己!)所以排除,是上面这两样的就直接返回false!算法:既然有了上面的建设而且昨天刷了整数翻转的题目,那就考虑把给定的数的一半给反过来,如果这个反过来的一半的数字和留下来的另外一半相当,那就是回文数字...原创 2019-06-14 11:32:00 · 390 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-58-最后一个单词的长度
Task思路:题目让返回最后一个单词的长度,那么首先想到的就是能不能倒着遍历,遇到了倒数第一个单词后面的那个空格就停止,然后返回前面的单词的长度!但是也有一些问题,比如最后一个单词后面并不就是结束,也有可能还是个空格,如果遇到这个空格就停下来的话,那就错误了,因此得设置flag来规避这种情况:代码:class Solution {public: int lengthOfLas...原创 2019-06-19 10:20:42 · 280 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-53-最大子序和
Task:解决方案:【1】暴力循环:思路:两层循环,第一层控制总的进度,第二层负责加并且验证;每当第一层循环给定一个起点,第二层循环就会从这个起点开始往后遍历加(先加一个,再加两个等等), 每次加完都会把新得到的sum的值和当前的最大值res_max进行比较,一直到把最大的sum赋给res_max才停止,否则就一直遍历寻找!时间复杂度:O(n2)代码:class Solution...原创 2019-06-19 09:54:31 · 281 阅读 · 0 评论 -
【LeetCode刷题】- 设计循环队列
Task:思路:完全没有思路,相当于学习了,抄几道题代码:class MyCircularQueue {private: vector<int> a; int max; public: /** Initialize your data structure here. Set the size of the queue to be k. */...原创 2019-06-05 09:29:23 · 1239 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-198-打家劫舍
Task:思路:【解法一:遍历,奇偶分别求和】思路参考:首先这个题目,要明白的就是,偷了一间房子,那么与之直接相连接的房子是不能再去偷了,不然就要被抓住完蛋了!那么就要隔间偷,所以首先想到的就是分为奇偶数进行,但是这样有一个问题:我们的目标是要偷到的金额最大,那么只偷奇数或者只偷偶数就不能保证是最大的:因为可能有一段是奇数家的钱多,有一段是偶数家的qia多,所以需要找准一个时机。当...原创 2019-06-21 09:45:39 · 649 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-38-报数
Task:思路:首先自己刚拿到这个题的时候真的是一脸蒙蔽,都不知道要干什么,但是仔细读题之后,发现读懂题才是这道题的关键所在。看了几个示例,发现其实就是给定一个n,然后输出就是把n-1的那个数给报出来,这就是所谓的报数,也没啥难的,比如:1;11;21;1211这三个例子,当n=1的时候,其实就是特殊情况;后面的就是通用的了。当n=2的时候,返回的是11,意思就是:上一个(...原创 2019-06-17 09:48:29 · 332 阅读 · 1 评论 -
【LeetCodes刷题】-C++-简单-107-二叉树的层次遍历II
Task:思路与代码:还是用递归的思想,要读懂题目,反向输出的是一个int类型二维数组,所以就是vector<vector<int>>那么思路就出来了:(1)创建二维数组:(2)往数组里添加树的值(正向添加);(3)对创建的二维数组反向排序然后输出;这里重要的步骤就是第二步,就需要遍历树,这里设置一个level的变量,用来记录遍历到树的第几层,也就是树的深...原创 2019-06-28 10:18:53 · 321 阅读 · 1 评论 -
【LeetCode刷题】-C++-简单-104-二叉树的最大深度
Task:思路与代码:有了递归的思想之后这样的题目看起来还是蛮简单的,就是自己调用自己,给定一个节点,(1)如果节点为空,那就直接返回0;(2)否则(这个节点不是空的),那就用max函数找这个节点的最大深度(左孩子的深度和右孩子的深度中取最大的)(3)然后max里面又调用了函数本身,这就是递归,意思就是对于刚刚那个节点的左孩子和右孩子也是一样的,比如左孩子,那我们又以左孩子为当前节点,...原创 2019-06-28 09:15:47 · 402 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-88-合并两个有序数组
Task:解法和思路:class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int i = m - 1; int j = n - 1; while(i >= 0 ...原创 2019-06-23 11:55:19 · 220 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-83-删除排序链表中的重复元素
Task:思路与解法:【解法一:双指针思路快慢指针法】(1)首先还是便捷检查,如果链表为空或者链表只有一个,那就直接返回链表;(2)常规情况:快慢指针一个在前一个在后,进行遍历,遇到元素相等的时候,如果快指针已经到头了,那就直接让慢指针的下一个元素指到NULL,如果没有到头,那就把快指针的下一个指给慢指针的next,然后再把快指针的下一个元素的赋值给快指针,相当于之前的q就没有了!...原创 2019-06-23 11:36:15 · 447 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-110-平衡二叉树
Task:思路和代码:想要解答这道题,就要知道什么是平衡二叉树,题目中给出了二叉树的定义:那就是每个节点的两个子树的高度差不能大于1,所以这个就是判定条件,如果满足,那么就是平衡二叉树;如果不满足,就不是平衡二叉树;那么现在的问题就是变成了,给定第一个节点的左右 两个子树的深度的问题了,所以用递归的策略,不断的去调用自己然后获得两个子树的深度,这个思路来自于第104的一道题目:二叉...原创 2019-07-01 17:14:53 · 352 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-101-堆成二叉树
Task:思路与代码:思路:题目要求的是判定给定的二叉树是不是堆成的,那么什么样的树才是堆成的呢?那就基本是第一个例子给出的完全二叉树了,否则怎么也不可能对称(比如那些缺胳膊少腿的肯定就不对称啊!)if( tree1 == NULL || tree2 == NULL) return false;然后就是就镜像相等!镜像相等镜像相等!所以这里同一个IsMirror()函数来实现,条件...原创 2019-06-26 09:39:35 · 287 阅读 · 0 评论 -
【LeetCode刷题】-岛屿数量
Task:思路:1.首先判断给定的二维数组是不是空的;2.对二维数组遍历一下,对每个元素进行判断,a)如果这个值等于1, 那么就把计数器+1, 并且对该元素四周进行深度搜索,3.返回代码:class Solution {public: int numIslands(vector<vector<char>>& grid) { ...原创 2019-06-12 10:37:57 · 806 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-100-相同的树
Task:思路与算算实现对树有个稍微的了解先,看代码里给的定义:可以看出树有值:val;有左右节点:left 和right;有形式:节点:结点值、左孩子、右孩子、那么题目要求就是两个树一样,那就节点,左孩子,右孩子都一样!所以首先边界检查:(1)两个树都是空的,那没错了就是一毛一样;(2)如果都不空且值还相等,那就用递归的形式再去判断:这里条件就是看这个节点的左子树和右...原创 2019-06-25 09:42:03 · 376 阅读 · 0 评论 -
【LeetCode刷题】-翻转字符串的单词III
Task:思路:字符串这里我不太行代码:class Solution {public: string reverseWords(string s) { int n=s.length(); vector<int> temp; for(int i=0;i<n;i++) { ...原创 2019-06-03 10:49:36 · 167 阅读 · 0 评论 -
【LeetCode刷题】-杨辉三角2(输出第K行)
Task:思路:这个还是不太清楚,二刷的时候好好看!代码:class Solution {public: vector<int> getRow(int rowIndex) { rowIndex++; if(rowIndex<=0){ return {}; } else if...原创 2019-06-03 10:36:06 · 402 阅读 · 0 评论 -
【LeetCode刷题】- 长度最小的子数组
Task思路:一个一个过,每增加一个计算一次综合sum,(1)如果计算出来的sum小于目标的值,那么就继续走;(2)如果计算出来sum的值>= 目标值,那么就记录一次此时的长度,保存在minlen中,然后把左端点+1,并且把前一个点的值减掉,然后(3)继续判断此时的和是否和目标值一样吗,如果小于的话退出while,开始for,如果还是大于或者等于,就继续把左端点右移一位,并且减去...原创 2019-06-03 09:44:28 · 214 阅读 · 0 评论 -
【LeetCode刷题】
Task:思路:亦或的思路;代码:class Solution {public: void reverseString(vector<char>& s) { for(int i = 0; i < s.size()/2; ++i){ s[i] ^= s[s.size()-1-i]; s[s....原创 2019-05-24 22:05:23 · 148 阅读 · 0 评论 -
【LeetCode刷题】-至少是其他数字两倍的最大数
题目代码class Solution {public: int dominantIndex(vector<int>& nums) { int index = 0; int maxNum = nums[0]; int secondMaxNum = 0; for (int i = 1; i < n...原创 2019-05-16 09:12:14 · 181 阅读 · 0 评论 -
【LeetCode刷题】- 二进制求和
题目:思路:用了两个指针分别指向a和b的末尾,然后每次取出一个字符,转为数字,若无法取出字符则按0处理,然后定义进位carry,初始化为0,将三者加起来,对2取余即为当前位的数字,对2取商即为当前进位的值,记得最后还要判断下carry,如果为1的话,要在结果最前面加上一个1代码:class Solution {public: string addBinary(string a,...原创 2019-05-21 09:25:16 · 231 阅读 · 0 评论 -
【leetCode刷题记录】——两数加和——0511
【题目】:https://leetcode-cn.com/problems/add-two-numbers/【思路】:输入两个链表,输出一个链表。则需要新建一个链表,把输入的两个链表从头开始,每两个数值相加,添加一个新节点到新链表后面。需要考虑两个数相加时产生的进位,以及最高位的进位。【代码】:class Solution {public: ListNode* addTwoNu...原创 2019-05-11 08:56:32 · 155 阅读 · 0 评论 -
【LeetCode刷题】- 寻找数组的中心索引
题目:代码class Solution {public: int pivotIndex(vector<int>& nums) { int len = nums.size(); int right = 0; int left = 0; for (int i : nums){ r...原创 2019-05-15 09:01:14 · 348 阅读 · 0 评论 -
【LeetCode刷题】-杨辉三角
任务:思路:向量二维数组的表示,vector<vector> array; 然后对每一行rows进行处理,很容易观察出这样的表达式: rows[j]=(array[i-1][j-1]+array[i-1][j]); 处理完以后需要在末尾放入一。代码:class Solution {public: vector<vector<int>> g...原创 2019-05-20 08:57:34 · 193 阅读 · 0 评论 -
【LeetCode刷题】-螺旋矩阵
Task:思路:设置四个边界,然后走一圈代码:class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int>re; if(matrix.empty() || matrix[0...原创 2019-05-19 09:21:17 · 284 阅读 · 0 评论 -
【LeetCode刷题】-旋转数组
题目:代码:class Solution {public: void rotate(vector<int>& nums, int k) { if (nums.empty()) return; if (k>nums.size()) k = k%nums.size(); vector<in...原创 2019-05-14 09:02:27 · 190 阅读 · 0 评论 -
【leetCode刷题记录】-215. Kth Largest Element in an Array
【2019/03/03】Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.【思路一】对无序数组排序;返回第K个数;时间复杂度是O(nlogn),空间复杂度...原创 2019-03-05 11:36:48 · 138 阅读 · 0 评论 -
【LeetCode刷题记录】- 从排序数组中删除重复项
Task:分析:代码:class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.size() == 0) return 0; int len; //当前数组中已经筛选出的非重复元素个数 len...原创 2019-05-12 08:56:48 · 210 阅读 · 0 评论 -
【LeetCode刷题】- 实现strStr()
Task:代码:class Solution {public: int strStr(string haystack, string needle) { if(needle.size() == 0) return 0; for(int i = 0; i < haystack.size(); i++){ ...原创 2019-05-22 09:16:09 · 155 阅读 · 0 评论 -
【LeetCode刷题】-加一
Task思路:思路就是从最低位循环开始向前检查当前位是否小于9,如果小于9就直接令当前位加1,返回数组即可,如果等于9就令当前位为0继续向前检查直到到达最高位为止,如果循环结束还没有返回值则说明此时数组里全是9,此时我们就返回一个最高位为1其余全为0且位数比原数多1位的数组即可代码:class Solution {public: vector<int> plusOn...原创 2019-05-17 09:42:13 · 144 阅读 · 0 评论 -
【LeetCode刷题】-两数之和 II - 输入有序数组
Task:思路:比较暴力的方法:两次循环:代码:方法一:暴力算法class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { vector<int> vRet; for(int i=0; i < nu...原创 2019-05-29 23:56:10 · 204 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-7-整数反转
Task:思路:主要是处理溢出,就是时时刻刻我们新的反转后的数组num要在[-2的31次方, 2的31次方- 1]这个区间之中,多以每次都要进行溢出的判断,如果溢出就返回0,没有溢出那就继续操作来翻转整数!代码:class Solution {public: int reverse(int x) { int num = 0; while(x){ ...原创 2019-06-13 16:03:11 · 178 阅读 · 0 评论 -
【LeetCode简单题】-两数之和
Task:思路:暴力算法:时间复杂度是O(n2)(1)遍历整个数组找到nums[i](2)从nums[i]之后的元素开始遍历,得到nums[j](3)判断nums[i]和nums[j]的值是不是相等,如果是的话返回两个下标Hash Map的解题思路:(1)建立存放结果的向量result;(2)构建一个一一对应的map,都是int类型(3)遍历数组a)记录每一个...原创 2019-06-13 09:45:07 · 179 阅读 · 0 评论 -
【LeetCode刷题】- 最大连续1的个数
Task:思路:(1)设置两个计数变量res 和count,前者记录到目前为止的1的个数,后者记录每个新的连续的有1的个数;(2)遍历:a) 如果等于1,那就给count+1;b) 如果不等于1,那就把count置为零,从新开始下一轮的开始;c) 然后把当前count的1的个数和res的比一下大小,把大的留下来(3) 最后返回结果代码:class Solution {pub...原创 2019-05-31 11:08:06 · 327 阅读 · 0 评论