数据结构与算法_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 <typename T>

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

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

  }

};

 

priority_queue<node, vector<node>, cmp> pq;

...

 

1.6 图

1.6.1 

/*
解法一:邻接矩阵,DFS;
*/
// class Solution {
//    public:
//     void dfs(const vector<vector<int>> &isConnected, vector<bool> &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<vector<int>> &isConnected) {
//         vector<bool> table(isConnected.size(), false);

/

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值