数据结构+算法
主要是力扣、PTA和蓝桥杯的训练题
qq_44192588
自学Java
展开
-
LeetCode 75. 颜色分类
分析: 所有情况共三种,分别为0 1 2,我们要做的是给它们从小到大排序解题:在遍历的时候将为0(最小)的元素先删除然后加入到数组开头在遍历的时候将为2(最大)的元素先删除然后加入到数组末尾,此时需要注意遍历的下标和数组长度变化需要作相应调整0都在最前面,2都在最后面,剩下的1就在中间不用管了,也就排序好了优化: 遍历的判断第一遍用的if,感觉过于累赘改用三目运算符(利用其短路效果),看起来舒服多了。github地址 每日持续更新题解,前期有C++版本和JavaScript双版本原创 2020-10-07 18:50:41 · 313 阅读 · 0 评论 -
LeetCode 12. 整数转罗马数字
题目不难,关键是找对单位,如 900 400 90 40 9 4,然后模拟减法循环走一遍github地址 每日持续更新题解,前期有C++版本和JavaScript双版本,现持续更新JavaScript版本,欢迎starJS代码/** * @param {number} num * @return {string} */// 题目不难,关键是找对单位数字 如 900 400 90 40 9 4对应的情况// 模拟减法循环走一遍,var intToRoman = function(num).原创 2020-08-06 21:07:34 · 320 阅读 · 0 评论 -
LeetCode 22. 括号生成
很经典的dfs+剪枝题dfs递归查找,先找左括号,再找右括号先对左子树进行搜索,当左括号数>右括号数,必定不符合要求,剪掉当左右括号数都为0,结束递归github地址 每日持续更新题解,前期有C++版本和JavaScript双版本,现持续更新JavaScript版本,欢迎starJS代码:var generateParenthesis = function(n) { let res= [] dfs('',n,n,res) return res};func原创 2020-08-05 21:24:07 · 350 阅读 · 0 评论 -
LeetCode 1233. 删除子文件夹
代码量少,言简意赅,一把ACgithub地址 每日持续更新题解,前期有C++版本和JavaScript双版本,现持续更新JavaScript版本,欢迎star先排序,同时定义一个Set和一个数组,存放排序后的第一个值用forEach循环,每次和数组最后一个比较,因为排序好了的,所以数组最后一项长度<=要比较那项的长度比较过程中会出现两种情况,一是正常的,如/a/b和/a/c;二是特殊的,如/a/b和/a/bc,两种情况两种判断方法我在上一步处理两种情况时,如果用数组添加会出现重复情况,于原创 2020-08-04 19:19:20 · 304 阅读 · 0 评论 -
LeetCode 812. 最大三角形面积
写在前面: 三个for循环暴力求解,用到了高中学过的海伦公式,吐槽一下力扣C++测试点又bug了,本地执行代码过了测试点,然后提交平台给我报错。。。这种水题害我调试半天,还是改点代码用JS写一把过的这是我的 力扣github仓库 ,有JavaScript和C++两个版本,每日更新。觉得有用的朋友请点点star~C++代码class Solution {public: double largestTriangleArea(vector<vector<int>>&原创 2020-05-09 03:11:36 · 227 阅读 · 0 评论 -
LeetCode 976. 三角形的最大周长
写在前面: 水题+1,其实可以用默认排序,然后遍历的时候逆序遍历。我特意把排序倒过来写的,算是复习一把C++和JS自带排序如何使用(其实是查出来的,我又忘了)C++代码class Solution {public: int compare(int num1,int num2){ if(num1<num2) return -1; else if(num1>num2) return 1; e原创 2020-05-09 01:28:31 · 163 阅读 · 0 评论 -
LeetCode 142. 环形链表 II
写在前面: 这道题有很多解法,不乏一些心机解法,比如在内存充足情况下(正常来讲是充足的)利用链表内存顺序存取,堆的地址又是从低到高,如果链表有环,则head->next小于或者等于head。比较正常的解法应该会用到set这种数据结构,我这题是纯用数学方法。定义快慢指针指向头结点,快指针速度是慢指针两倍设头结点到环的起点距离为a,环的起点到两指针第一次相遇的点距离为b,两指针相遇的点再到...原创 2020-05-07 23:23:11 · 244 阅读 · 0 评论 -
LeetCode 155. 最小栈
写在前面: 用了两个栈,一个栈用于存储数据,另外一个用于维护最小值,很迷的操作是我JS代码又没AC,同一个测试数据,本地结果一样,提交就是报错,第二次遇上这种事儿了,严重怀疑这是平台的锅欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:class MinStack {public: /** initialize your data st...原创 2020-05-04 01:10:22 · 195 阅读 · 0 评论 -
LeetCode 53. 最大子序和
写在前面: 这是力扣上的一道easy题,这种求最大子序列的题很经典,解法也有很多,我这种方法应该属于动态规划的思想,具体思路在js代码中注释了,欢迎交流~我的力扣github仓库,有JavaScript和C++两个版本,每日更新,觉得有用的同学请点个star~C++代码:class Solution {public: int maxSubArray(vector<int>...原创 2020-05-03 23:55:59 · 155 阅读 · 0 评论 -
LeetCode 2. 两数相加
写在前面: 思路和之前写过的一个链表两数相加是一样的,就是注意满十进一的临界条件欢迎访问我的力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L...原创 2020-04-29 01:45:18 · 146 阅读 · 0 评论 -
LeetCode 121. 买卖股票的最佳时机
写在前面: 第一遍两个for循环暴力,后优化成一个for循环,栈动态取最小值,定义差值求最大收益欢迎关注我的力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:class Solution {public: int maxProfit(vector<int>& prices) { if(!prices.size())...原创 2020-04-29 00:42:05 · 194 阅读 · 0 评论 -
LeetCode 1021. 删除最外层的括号
写在前面: 挺简单的一道栈应用,定义一个string来记录结果,用栈记录过程就行了,需要加两个判断来去掉外围的括号欢迎关注我的力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:class Solution {public: string removeOuterParentheses(string S) { string res; ...原创 2020-04-27 00:31:01 · 175 阅读 · 0 评论 -
LeetCode 682. 棒球比赛
写在前面: 挺简单的一道栈应用,用sum记录总分,用栈记录过程就行了欢迎关注我的力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:class Solution {public: int calPoints(vector<string>& ops) { int sum=0; stack<int&...原创 2020-04-26 01:30:34 · 170 阅读 · 0 评论 -
LeetCode 844. 比较含退格的字符串
写在前面: 典型的栈应用,需要判断遇到‘#'时,栈为空也要进行相应处理,不能直接弹栈C++栈可以直接判断是否相等,JS则不能直接判断数组是否相等欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:class Solution {public: bool backspaceCompare(string S, string T) { ...原创 2020-04-26 00:23:18 · 131 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第N个节点
写在前面: 和之前写过的返回倒数第几个节点是一样的思路,同样用到了快慢指针,但是要注意判断倒数第一个的情况,代码详细注释了,在JS写的那一块欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:/** * Definition for singly-linked list. * struct ListNode { * int val;...原创 2020-04-21 23:10:20 · 150 阅读 · 0 评论 -
LeetCode 445. 两数相加 II
写在前面: 第一次写的时候没有复用链表头插法这个函数,导致代码杂乱不易读,不过即使这样代码还是很累赘。。我是直接两次链表头插法得出结果,还有有以下思路递归栈提取链表节点的值合并后用字符串存起来,再用链表取出来最后返回欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:/** * Definition for singly-linked ...原创 2020-04-20 02:59:06 · 172 阅读 · 0 评论 -
LeetCode 328. 奇偶链表
写在前面: 把奇偶节点分类,把奇节点串起来,再串接偶节点欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int...原创 2020-04-18 01:13:07 · 123 阅读 · 0 评论 -
这几天水力扣的题目集汇总
欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新记录我从 2020.04开始至今的算法代码、刷题记录,有JavaScript和C++两个版本easy至2020/04/17 完成力扣题库所有简单难度链表题#题目难度21[合并两个有序链表](./daily/链表/21. 合并两个有序链表)简单83[删除排序链表中的重...原创 2020-04-17 02:56:12 · 171 阅读 · 0 评论 -
LeetCode 面试题22. 链表中倒数第k个节点
写在前面: 起初想到的是先遍历一遍,再重新把相差的个数跑完,后用双指针优化成了只需要跑一遍就能得到结果欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *ne...原创 2020-04-16 02:17:31 · 147 阅读 · 0 评论 -
LeetCode 面试题 02.07. 链表相交
写在前面: 和上一次刷的是同一道力扣原题,想看思路请移步 LeetCode160. 相交链表(小白写法) 同时欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新题目地址...原创 2020-04-15 01:31:35 · 187 阅读 · 0 评论 -
LeetCode 面试题 02.06. 回文链表
写在前面: 和昨天写的链表题一样,昨天是通过后半段链表逆序+快慢指针求解,今天是通过前半段链表逆序+快慢指针实现的。和昨天不同的是,昨天的写法不需要考虑中间节点是奇是偶的问题,因为是两头往中间跑,但是今天的写法是中间往两头跑,所以要判断奇数的情况欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:/** * Definition for s...原创 2020-04-14 02:29:24 · 190 阅读 · 0 评论 -
LeetCode 面试题 02.01. 移除重复节点
写在前面: 通过set集合可去重的特性来存储不重复的值,可得最终结果欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNo...原创 2020-04-14 01:22:05 · 148 阅读 · 0 评论 -
LeetCode 867. 转置矩阵
写在前面: 新建一个相同的数据结构存放返回的值,暴力遍历的时候转置一下就好了 。另外欢迎访问我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:class Solution {public: vector<vector<int>> transpose(vector<vector<int>>& ...原创 2020-04-14 00:44:34 · 95 阅读 · 0 评论 -
LeetCode 876. 链表的中间结点
写在前面: 快慢指针走一遍,快指针走完,剩下的慢指针f就是最终返回结果欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListN...原创 2020-04-14 00:40:29 · 111 阅读 · 0 评论 -
LeetCode 35. 搜索插入位置
欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新写在前面: 判断大小直接返回结果,注意相等的情况C++代码:class Solution {public: int searchInsert(vector<int>& nums, int target) { if(target<=nums[0]) ...原创 2020-04-12 21:14:36 · 133 阅读 · 0 评论 -
LeetCode 234. 回文链表
欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新写在前面: 这题好无语,dev跑的结果和oj平台不一样,害我调试那么久我是通过快慢指针+后半段反转的方式解决的,也可以快慢指针+前半段反转或者快慢指针+栈 等等方式C++:/** * Definition for singly-linked list. * struct ListNode { * ...原创 2020-04-12 03:22:59 · 176 阅读 · 0 评论 -
LeetCode 206. 反转链表
欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新写在前面: 水题鸭,链表的头插法,以后代码要多注释C++:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :...原创 2020-04-12 01:04:38 · 108 阅读 · 0 评论 -
LeetCode 203. 移除链表元素
写在前面: 欢迎关注我的力扣github仓库,有JavaScript和C++两个版本,每日更新最近在写链表题,专挑简单的写嘿嘿,新建一个链表,指向原链表的头部,然后找到相同值就跳到下一个,没找到就把当前的值捞起来C++代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ...原创 2020-04-11 03:19:47 · 115 阅读 · 0 评论 -
LeetCode160. 相交链表(小白写法)
欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新写在前面: 我这里有两种写法小白解法:让较长的链表跑完多余的部分,再让两链表同时跑,相等返回即结果,否则返回空双指针的解法,两链表同时进行,链表a跑完自己的部分再去跑b的部分,链表b跑完自己部分也去跑a的部分。这样他们如果有相同部分必会遇到,此时返回即结果,否则返回为空C++代码:/** * Def...原创 2020-04-10 02:00:59 · 169 阅读 · 0 评论 -
LeetCode 141. 环形链表
写在前面: 这道题解法很多,常见的是快慢指针和哈希表法。在评论区里看到一些取巧做法,有的甚至通过破坏链表的数据结构暴力解决,让我影响比较深刻的还有一位大佬的JS写法思路:JSON.stringify不能字符串化含循环引用的结构 这写法太骚了哈哈欢迎访问我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:/** * Definition for s...原创 2020-04-09 02:08:34 · 141 阅读 · 0 评论 -
LeetCode 237. 删除链表中的节点
写在前面: 题目特别简单,但是说了一大堆,其实就是要求把当前节点删除的意思,出题的思路是好的,但是不够严谨。欢迎访问我的 力扣github仓库,有JavaScript和C++两个版本,每日更新题目的参数只给了要删除的节点node,并没有给链表或头结点head获取不到node的前一个节点,那么就需要把后面的值覆盖node的值,然后把后面节点再指向下一个节点,这样就绕过了node节点,其实没有...原创 2020-04-09 00:42:10 · 109 阅读 · 1 评论 -
LeetCode面试题13. 机器人的运动范围
写在前面: 换汤不换药的题目,把行坐标和列坐标之和大于k的方格看作是障碍物,那么这道题是典型的搜索题了,两个for循环遍历的暴力解法好像可以过,但是不建议那样做,因为官方给的数据范围最大才100,再大些应该会超时欢迎访问我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:class Solution {public: int visited[10...原创 2020-04-08 02:58:29 · 166 阅读 · 0 评论 -
LeetCode 21. 合并两个有序链表
写在前面: 我的写法很无脑,创建一个新的链表,然后把两个有序链表串起来,看了有的大佬写法是递归,这个没想到。欢迎访问我的 力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode ...原创 2020-04-07 23:32:45 · 107 阅读 · 0 评论 -
LeetCode每日一题 面试题 01.07. 旋转矩阵
写在前面: 题目似曾相识,吐槽一下:突然JS二维数组构建和赋值有点不习惯思路:一个非常简单的规律,我们观察可以发现,当顺序针旋转90度时,假设向量长度为N,旋转之后坐标变化是 matrix[i][j]—>matrix[j][N-i-1]另外欢迎访问我的 力扣github仓库,有JavaScript和C++两个版本,每日更新面试题 01.07. 旋转矩阵给你一幅由 N × N ...原创 2020-04-07 03:26:32 · 233 阅读 · 0 评论 -
LeetCode11. 盛最多水的容器
写在前面: 抱着试一试的心态想两个for循环暴力出来,居然没过,之前写的题好像暴力都过了,显示超时之后就优化咯思路:双指针解法面积尽可能大,那么就需要宽和高越大越好从左右两边开始开始计算,即让宽最大让高度低的一边收缩,找到更高的高度,最后得出最优解C++代码:class Solution {public: int maxArea(vector<int>&am...原创 2020-04-06 02:43:56 · 92 阅读 · 0 评论 -
LeetCode每日一题1. 两数之和
欢迎访问我的力扣github仓库,有JavaScript和C++两个版本,每日更新写在前面: 水题+1,第一遍用暴力以为会超时,没想到还是过了,后来用哈希表优化了一下,暴力解法时间复杂度O(n^2),优化后为O(n)C++代码://无脑暴力法 class Solution {public: vector<int> twoSum(vector<int>&am...原创 2020-04-05 03:10:52 · 147 阅读 · 0 评论 -
LeetCode每日一题:42. 接雨水(小白写法)
欢迎访问我的力扣github仓库,有JavaScript和C++两个版本,每日更新题解:我没有用到很复杂的数据结构,单纯是一列列求出来的,所以时间复杂度为较大,O(n^2)从第二列开始,到倒数第二列结束,分别找出当前所在列的左右两边的最高列短板效应可知,左右两边最高列中的那个较低的就是能够接雨水的极限高度只要比当前所在列高,就减去当前列的高度,那么就是当前所在列能够接雨水的高度累加这...原创 2020-04-04 15:05:44 · 250 阅读 · 0 评论 -
LeetCode每日一题:8. 字符串转换整数 (atoi)
写在前面: 用c++写的时候报了越界的坑,后来稍作处理就很容易AC了欢迎访问我的力扣github仓库,有JavaScript和C++两个版本,每日更新C++代码:class Solution {public: int myAtoi(string str) { int min=-pow(2,31),max=pow(2,31)-1; int flag=1...原创 2020-04-03 03:12:46 · 379 阅读 · 0 评论 -
LeetCode 每日一题 1111. 有效括号的嵌套深度(小白写法)
写在前面: 菜鸡的我读题两小时,终于看懂了。。。思路:题目意思就是分成 a b两部分,初始为0每次往a或b中加入seq[i],分给a时answer[i]=0,分给b时answer[i]=1如果seq[i]==’(’ 此时a和b谁深度小就把它加大如果seq[i]==’)’ 此时a和b谁深度大就把它压小这样做就能保证a和b深度是差不多的,也就能保证得到a、b两个字符串的最小深度...原创 2020-04-02 01:42:46 · 238 阅读 · 0 评论 -
1017 A除以B (分析+注释)
思路:模拟数学算数的高位一直除到低位当除数小于被除数时要分开讨论模拟运算的时候要注意去除前导的0题目:本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。输入格式:输入在一行中依次给出 A 和 B,中间以 1 空格分隔。输出格式:在一行中依次输出 Q 和 R,中间以 1 空格分隔。...原创 2020-03-15 12:15:15 · 135 阅读 · 0 评论