第十六期组队学习 Leetcode练习

Leetcode练习

本次组队学习采用leetcode练习实践,目的提高编程能力。
整体计划采用整理形式,为后续练习相关知识提供体系总结。

项目地址:
https://github.com/datawhalechina/team-learning-program/tree/master/LeetCodeClassification

一、 任务安排

Task1: 分治算法

练习题目

  1. Pow(x,n)
    题目链接: https://leetcode-cn.com/problems/powx-n/)
    思路解答: https://blog.csdn.net/qq_45019698/article/details/108105005
  2. 最大子序和
    题目链接: https://leetcode-cn.com/problems/maximum-subarray/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/104594644
  3. 多数元素
    题目链接:https://leetcode-cn.com/problems/majority-element/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108105724
    主要思想
    分治算法的主要思想是将原问题递归地分成若干个子问题,直到子问题满足边界条件,停止递归。将子问题逐个击破(一般是同种方法),将已经解决的子问题合并,最后,算法会层层合并得到原问题的答案。

分治算法的步骤
分:递归地将问题分解为各个的子问题(性质相同的、相互独立的子问题);
治:将这些规模更小的子问题逐个击破;
合:将已解决的子问题逐层合并,最终得出原问题的解;
在这里插入图片描述

Task2: 动态规划算法

练习题目

  1. 最长回文子串
    题目链接: https://leetcode-cn.com/problems/longest-palindromic-substring/
    思路解答: https://blog.csdn.net/qq_45019698/article/details/108105005
  2. 编辑距离
    题目链接: https://leetcode-cn.com/problems/edit-distance/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108175777
  3. 打家劫舍
    题目链接:https://leetcode-cn.com/problems/house-robber/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108175985
  4. 打家劫舍||
    题目链接:https://leetcode-cn.com/problems/house-robber-ii/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108175985
  5. 最长回文子序列
    题目链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108176205
  6. 最长连续递增序列
    题目链接:https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108176326

主要思想
若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题,例如斐波那契数列,如果运用递归的方式来求解会重复计算很多相同的子问题,利用动态规划的思想可以减少计算量。

动态规划法仅仅解决每个子问题一次,具有天然剪枝的功能,从而减少计算量,

一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。

动态规划模板步骤:

  • 确定动态规划状态
  • 写出状态转移方程(画出状态转移表)
  • 考虑初始化条件
  • 考虑输出状态
  • 考虑对时间,空间复杂度的优化(Bonus)

Task3: 查找一

练习题目

  1. 探索插入位置
    题目链接: https://leetcode-cn.com/problems/search-insert-position/
    思路解答: https://blog.csdn.net/qq_45019698/article/details/108228234
  2. 快乐数
    题目链接: https://leetcode-cn.com/problems/happy-number/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108228322
  3. 同构字符串
    题目链接:https://leetcode-cn.com/problems/isomorphic-strings/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108228426
  4. 有效的字母异位词
    题目链接:https://leetcode-cn.com/problems/valid-anagram/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108228539
  5. 单词规律
    题目链接:https://leetcode-cn.com/problems/word-pattern/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108228618
  6. 两个数组的交集
    题目链接:https://leetcode-cn.com/problems/intersection-of-two-arrays/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108228682
  7. 两个数组的交集||
    题目链接:https://leetcode-cn.com/problems/intersection-of-two-arrays/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108228825
  8. 分割数组的最大值
    题目链接:https://leetcode-cn.com/problems/split-array-largest-sum/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108228951
  9. 根据字符出现频率排序
    题目链接:https://leetcode-cn.com/problems/sort-characters-by-frequency/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108229146
  10. 有序数组中的单一元素
    题目链接:https://leetcode-cn.com/problems/single-element-in-a-sorted-array/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108229189

Task4: 查找二

练习题目

  1. 两数之和
    题目链接: https://leetcode-cn.com/problems/two-sum/
    思路解答: https://blog.csdn.net/qq_45019698/article/details/104593383
  2. 三数之和
    题目链接: https://leetcode-cn.com/problems/3sum/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/100388132
  3. 最接近的三数之和
    题目链接:https://leetcode-cn.com/problems/3sum-closest/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/100525302
  4. 四数之和
    题目链接:https://leetcode-cn.com/problems/4sum/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108268940
  5. 字母异位词分组
    题目链接:https://leetcode-cn.com/problems/group-anagrams/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108269001
  6. 直线上最多的点数
    题目链接:https://leetcode-cn.com/problems/max-points-on-a-line/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108269030
  7. 存在重复元素||
    题目链接:https://leetcode-cn.com/problems/contains-duplicate-ii/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108267660
  8. 存在重复元素|||
    题目链接:https://leetcode-cn.com/problems/contains-duplicate-iii/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108267747
  9. 回旋镖的数量
    题目链接:https://leetcode-cn.com/problems/number-of-boomerangs/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108229146
  10. 四数相加||
    题目链接:https://leetcode-cn.com/problems/4sum-ii/
    思路解答:https://blog.csdn.net/qq_45019698/article/details/108229189

二、 总结

初衷
这次组队学习最初的目的

  • 练习java语法,为网站项目做准备
  • 作为队长练习自己的沟通能力

意外之喜

  • 对java语法的数组,字符串,map,set及list这些数据结构以及动态规划,分治算法熟悉、熟练到掌握
  • 认识崔峰、范哥、云龙学长这些人,作为队长很轻松,氛围也很好。

猜你喜欢

转载自blog.csdn.net/qq_45019698/article/details/108103924