数据结构与算法_leetcode刷题总结

一、数据结构

1.1 链表

1.1.1 增删查改;

1.1.2 翻转链表:(1)头插法;(2)尾插法;

1.1.3 判断有无环、环的起始节点:(2)快慢指针;(2)哈希表;

1.1.4 通用技巧:(1)快慢指针;(2)当头结点不确定时,建立dummy使得dummy->next = head;

 

1.2 栈与队列

1.2.1 二叉树的非递归遍历:(1)前序;(2)中序;(3)后序;

1.2.2 栈实现队列、队列实现栈:(1)翻转来翻转去;

1.2.3 下一个更大的数、气温问题:(1)从后往前入栈;

1.2.4 通用技巧:(1)数组等的翻转、倒叙等情况下考虑栈;(2)所有的递归均可使用栈实现;(3)stl库:stack、list、queue、deque;

 

1.3 字符串

1.3.1 最短子串、连续字符串问题:(1)滑动窗口;

1.3.2 通用技巧:(1)字符操作,建立table(26, 0),哈希思想;

 

1.4 二叉树

1.4.1 遍历、树的深度、树的叶子节点个数、更大的树、左叶子个数等:(1)前序、中序、后序的DFS遍历;(2)前序、中序、后序的stack遍历;(3)层序queue遍历;

1.4.2 BST和数组转换:(1)二分查找;

1.4.3 通用技巧:(1)DFS,stack前中后序遍历;(2)queue层序遍历;

 

1.5 堆

1.5.1 最大K个元素问题:(1)pq;

1.5.2 通用代码:

struct node{

  int num;

  string str;

  node(int n, const string& s): num(n), str(s) {}

};

 

struct cmp{

  template

  bool operator()(const T& left, const T& right){

    return left.num >= right.num; // >=是小根堆,单增;

  }

};

 

priority_queue, cmp> pq;

...

 

1.6 图

1.6.1 

/*
解法一:邻接矩阵,DFS;
*/
// class Solution {
//    public:
//     void dfs(const vector> &isConnected, vector &table,
//              int i) {
//         table[i] = true;

//         for (int j = 0; j < isConnected[i].size(); ++j) {
//             if ((isConnected[i][j] == 1) && (table[j] == false))
//                 dfs(isConnected, table, j);
//         }
//     }

//     int findCircleNum(vector> &isConnected) {
//         vector table(isConnected.size(), false);

<

你可能感兴趣的:(数据结构与算法,数据结构,算法)