Leetcode练习
本次组队学习采用leetcode练习实践,目的提高编程能力。
整体计划采用整理形式,为后续练习相关知识提供体系总结。
项目地址:
https://github.com/datawhalechina/team-learning-program/tree/master/LeetCodeClassification
一、 任务安排
Task1: 分治算法
练习题目
- Pow(x,n)
题目链接: https://leetcode-cn.com/problems/powx-n/)
思路解答: https://blog.csdn.net/qq_45019698/article/details/108105005 - 最大子序和
题目链接: https://leetcode-cn.com/problems/maximum-subarray/
思路解答:https://blog.csdn.net/qq_45019698/article/details/104594644 - 多数元素
题目链接:https://leetcode-cn.com/problems/majority-element/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108105724
主要思想
分治算法的主要思想是将原问题递归地分成若干个子问题,直到子问题满足边界条件,停止递归。将子问题逐个击破(一般是同种方法),将已经解决的子问题合并,最后,算法会层层合并得到原问题的答案。
分治算法的步骤
分:递归地将问题分解为各个的子问题(性质相同的、相互独立的子问题);
治:将这些规模更小的子问题逐个击破;
合:将已解决的子问题逐层合并,最终得出原问题的解;
Task2: 动态规划算法
练习题目
- 最长回文子串
题目链接: https://leetcode-cn.com/problems/longest-palindromic-substring/
思路解答: https://blog.csdn.net/qq_45019698/article/details/108105005 - 编辑距离
题目链接: https://leetcode-cn.com/problems/edit-distance/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108175777 - 打家劫舍
题目链接:https://leetcode-cn.com/problems/house-robber/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108175985 - 打家劫舍||
题目链接:https://leetcode-cn.com/problems/house-robber-ii/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108175985 - 最长回文子序列
题目链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108176205 - 最长连续递增序列
题目链接:https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108176326
主要思想
若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题,例如斐波那契数列,如果运用递归的方式来求解会重复计算很多相同的子问题,利用动态规划的思想可以减少计算量。
动态规划法仅仅解决每个子问题一次,具有天然剪枝的功能,从而减少计算量,
一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。
动态规划模板步骤:
- 确定动态规划状态
- 写出状态转移方程(画出状态转移表)
- 考虑初始化条件
- 考虑输出状态
- 考虑对时间,空间复杂度的优化(Bonus)
Task3: 查找一
练习题目
- 探索插入位置
题目链接: https://leetcode-cn.com/problems/search-insert-position/
思路解答: https://blog.csdn.net/qq_45019698/article/details/108228234 - 快乐数
题目链接: https://leetcode-cn.com/problems/happy-number/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108228322 - 同构字符串
题目链接:https://leetcode-cn.com/problems/isomorphic-strings/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108228426 - 有效的字母异位词
题目链接:https://leetcode-cn.com/problems/valid-anagram/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108228539 - 单词规律
题目链接:https://leetcode-cn.com/problems/word-pattern/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108228618 - 两个数组的交集
题目链接:https://leetcode-cn.com/problems/intersection-of-two-arrays/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108228682 - 两个数组的交集||
题目链接:https://leetcode-cn.com/problems/intersection-of-two-arrays/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108228825 - 分割数组的最大值
题目链接:https://leetcode-cn.com/problems/split-array-largest-sum/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108228951 - 根据字符出现频率排序
题目链接:https://leetcode-cn.com/problems/sort-characters-by-frequency/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108229146 - 有序数组中的单一元素
题目链接:https://leetcode-cn.com/problems/single-element-in-a-sorted-array/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108229189
Task4: 查找二
练习题目
- 两数之和
题目链接: https://leetcode-cn.com/problems/two-sum/
思路解答: https://blog.csdn.net/qq_45019698/article/details/104593383 - 三数之和
题目链接: https://leetcode-cn.com/problems/3sum/
思路解答:https://blog.csdn.net/qq_45019698/article/details/100388132 - 最接近的三数之和
题目链接:https://leetcode-cn.com/problems/3sum-closest/
思路解答:https://blog.csdn.net/qq_45019698/article/details/100525302 - 四数之和
题目链接:https://leetcode-cn.com/problems/4sum/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108268940 - 字母异位词分组
题目链接:https://leetcode-cn.com/problems/group-anagrams/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108269001 - 直线上最多的点数
题目链接:https://leetcode-cn.com/problems/max-points-on-a-line/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108269030 - 存在重复元素||
题目链接:https://leetcode-cn.com/problems/contains-duplicate-ii/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108267660 - 存在重复元素|||
题目链接:https://leetcode-cn.com/problems/contains-duplicate-iii/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108267747 - 回旋镖的数量
题目链接:https://leetcode-cn.com/problems/number-of-boomerangs/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108229146 - 四数相加||
题目链接:https://leetcode-cn.com/problems/4sum-ii/
思路解答:https://blog.csdn.net/qq_45019698/article/details/108229189
二、 总结
初衷
这次组队学习最初的目的
- 练习java语法,为网站项目做准备
- 作为队长练习自己的沟通能力
意外之喜
- 对java语法的数组,字符串,map,set及list这些数据结构以及动态规划,分治算法熟悉、熟练到掌握
- 认识崔峰、范哥、云龙学长这些人,作为队长很轻松,氛围也很好。