【目录】leetcode刷题

  简单说下刷leetcode的方法,力扣网址,刷题前我先刷了两遍《leetcode101-和你一起轻松刷题C++版》这本电子书(也可刷《剑指Offer》)先熟悉算法有哪些常规套路;然后再按照leetcode右侧栏的类别专项,刷完200+,基本就可以了,专项刷些“二分法、哈希表、双指针、字符串、链表、树、队列、栈、递归、dfs、回溯、贪心、动态规划”这几个类,每类约10-20题的样子;最后二刷回顾下刷过的题;可以买个会员,比较方便查看每个题的考察频率,这是目前leetcode上的高频题,大约需要用3~6个月时间(建议空闲时间刷,早晚都要刷,不如早点刷 )
第一遍刷是很痛苦的,建议直接看答案,重要的是理解思想,遇到一种问题知道怎么解决:
  使用什么数据结构比较合适(数组还是vector还是list还是deque,stack还是queue还是堆或priority_queue,unordered_set还是unordered_map,链表还是二叉树or图还是更复杂的结构组合...)
  用什么方法去解决(头尾指针还是快慢指针,dfs还是回溯还是bfs,二分查找还是快排还是二叉树查找,模拟还是贪心还是动态规划,各种奇妙的方法还是硬核登月造火箭还是防脱发指南...)
 
 类型
  1. 贪心算法   (分饼干:孩子和饼干排序,while,child++、分糖果:前向、反向遍历,注意反向遍历 num[i-1]=max(num[i-1],num[i]+1);)
  2. 双指针     (两数之和:头尾指针 时间复杂度O(N)、链表是否有环:快慢指针 或 unordered_set(哈希表)合并有序数组:三个尾指针,最后有个while最小覆盖子串(hard)
  3. 二分查找    (只能对有序数组进行二分查找 x的平方根:二分查找或牛顿迭代法 数组区间查找:lower_bound与upper_bound问题 二分查找 旋转数组查找数字:while(start<end);target == nums[mid] return true;通过nums[mid]于nums[start]、nums[end]找有序数组)
  4. 排序算法    (快排:一遍遍历通过随机枢将数组分为两部分,枢左边均小于枢右边,要有快排的画面感   k-th Element:查找无序数组中第k大的元素(快速选择))
  5. 二维数组的搜索  (深度优先搜索(主、辅函数-dfs递归)):最大岛屿面积、省份数量 回溯法:回溯、递归主要用于解决什么呢?解决for太多代码无法实现的问题  全排列、组合、单词搜索  广度优先搜索(bfs):queue (先进先出) for(i<queue.size()) 主要应用于二叉树结构)
  6. 动态规划   (找到状态转移方程及dp数组的初始化  爬楼梯 打家劫舍 最小路径和 最大正方形 股票交易...)
  7. 数据结构-stl    (主要锻炼逻辑能力. c++_stl. 数组:解决方法,遍历(要知道for和while适合解决什么问题),找规律.  哈希表:无序map、跳表、二维数组 insert(),erase().count())
  8. 字符串比较、匹配    (首尾双指针.  回文子串. kmp)
  9. 单链表   (链表翻转:链表中指针的翻转;定义两个节点,prev前节点,next后节点.  合并两增序链表:new ListNode(0);while(l1&&l2);node->next=l1? l1:l2;return dummp->next;)
  10. 二叉树     (树的递归:求二叉树的最大深度.   层次遍历:各层的平均值.  前中后序遍历:二叉树前序遍历 使用栈stack实现)
  11. leetcode刷题

刷题指南:

王争数据结构与算法之美

原文地址:https://www.cnblogs.com/go-ahead-wsg/p/14594203.html