主要是对leetcode 做题后,感悟进行整理总结,方便回顾
目前处理问题,还是主要以暴力破解为主,这一方面进行改良。
领悟
路漫漫其修远兮,吾将上下而求索。 学习是伴随一生的,今天不想跑,所以才去跑。
学习的路程是枯燥的,远没有其他事情 带来的快乐要迅速,即时快乐好像成了大家心照不宣的思想。
但是当你真正的静下心来,一切好像镜中水月一般,空虚 无味,这应该不是生活的主题曲吧?
只有真正的快乐才能冲淡心中的空虚,无知者自大,我们应以谦卑的心态对待万物。
祝愿我们:待到秋来九月八,我花开后百花杀
解题思路
1. 首先明确 algorithm的核心思想就是 **数据结构** 和**逻辑运算**
2. 清楚 题目所要需要的数据 通常为return的数据(数组,int...)
3. 思考 需要得到的数据 ==具有什么DNA特征==,又有什么办法可以进行利用
4. 如何 通过独有特性 再结合其他手段 将数据进行拿到? 例如:栈 数组等等
5. 有什么手段 可以对解题方法进行优化
leetcode 刷题归纳整理
提数 | 题目 | 级别 | 链接 | 收获 | ps | 时间 |
---|---|---|---|---|---|---|
1 | 两数之和 | Simple | https://leetcode.cn/problems/two-sum/ | 自己的办法为:暴力破解,双for循环 进行相加。Cattle:通过map的 containsKey()方法 进行判断 是否有与当前值 相减=目标值的数据 | ||
9 | 回文数 | Simple | https://leetcode.cn/problems/palindrome-number/ | 我的思路是:简单的将数字转成String进行倒序 判断是否一致。Cattle:通过% 和* /运算 获取到数字的倒序结构 对获取到的值进行细分,比如倒序第一位 %10可以得到 | ||
13 | 罗马数字转整数 | Simple | https://leetcode.cn/problems/roman-to-integer/ | 我的思路:将每个值转成对应数字后,判断前一个值是否小于当前值,是否为组合数字 Cattle:通过switch将字母转换成 对应数字,在进行判断是否为组合数字 switch关键字 运行时间高于if判断,而且switch只能是在常量选择分支时比ifelse效率高 | ||
14 | 最长公共前缀 | Simple | https://leetcode.cn/problems/longest-common-prefix/ | 对数据进行处理时,空间复杂度 尽可能优化. startsWith()方法判断前缀 可以将for循环 i的值声明在外面,i的< 可以为多个 | ||
20 | 有效的括号 | Simple | https://leetcode.cn/problems/valid-parentheses/ | 这个没有写出来,写的很复杂 多层if嵌套查询 有一种是 用replace 将正确的括号 进行替换成"",Cattle:通过Stack 栈或者ArrayDeque 后进先出的数据结构,将数据存入 与前面数据进行对比 | ArrayDeque 性能要高于Stack | |
121 | 买卖股票的最佳时机 | Simple | https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ | 我的思路:暴力破解,但是由于后面 数组数据太多了(1000+) 导致执行超时,Cattle:通过Math的.max和.min方法 获取买入股票最小值和卖出股票的最大值 | ||
155 | 最小栈 | secondary | https://leetcode.cn/problems/min-stack/ | 这个没有写出来,一直没有思路 Cattle:获取最小值是 主要考点 难点,每次push() 除了新增当前值,并新增一个最小值,保障栈顶的值为最小 | 这个思路无敌,以一种特别巧妙的方法 将问题处理完成 体现了 有好的解题思路的重要性 | |
极海推荐的字节算法题 | 打印出所有元素右边第一个大于该元素的值 | https://www.bilibili.com/video/BV1WY4y1N7Tu/?spm_id_from=333.999.0.0&vd_source=13e97725f27f413f78f4716640e9ebde | 我的思路:暴力破解 获取第一个大的值,调用break 中止循环,Cattle:通过单调栈 的方式,判断大于栈顶的第一个元素 将数据存入数组,并且通过while循环 可以多次判断 | 主要体现了单调栈的引用,保障从栈顶到栈底数据 都是递增或者递减的,严格来讲 没有使用到单调栈,只是使用到了类似的思想 呜呼😜 | 2022/10/5 记录 加油!! | |
26 | 删除有序数组中的重复项 | Simple | https://leetcode.cn/problems/remove-duplicates-from-sorted-array/ | 升序排列数组,可以根据这个特性 进行处理,还是通过的类似 暴力破解,多刷题 懂得更多的解题思路 | ||
27 | 移除元素 | Simple | https://leetcode.cn/problems/remove-element/submissions/ | 原地算法 对这种处理逻辑的题,拥有无可睥睨的优势 | ||
58 | 最后一个单词的长度 | Simple | https://leetcode.cn/problems/length-of-last-word/ | 某些题使用while 比for更加方便,这个判断最后一个单词的长度,却没有从后往前遍历,🤣不应该存在,警醒!!! | ||
12 | 整数转罗马数字 | secondary | https://leetcode.cn/problems/integer-to-roman/ | 总体思路还算正确,硬性的逻辑校验 列出所有可能出现的 罗马数字,进行判断,更好的写法 放入数组中,进行判断 取下标值 贪心算法 Good | 局部最优解,追求全局最优解 | 2022/11/7 |
15 | 三数之和 | secondary | https://leetcode.cn/problems/3sum/submissions/380951014/ | 一直没有写出来,没想到使用 双指针方法,进行操作非常方便,细节在于 三元组去重,以及指针的移动 | 双指针法厉害,又学到了 | |
18 | 四数之和 | secondary | https://leetcode.cn/problems/4sum/description/ | 类似三数之和,也是通过双指针法进行处理,数据去重和 缩小时间复杂度 可以进行深入探究,时间上更快的,除了所有算法的不同 还有对问题的过滤,例如:判断空 各种的逻辑校验 | 2022/11/11 |