玩转算法面试-LeetCode真题分门别类讲解
标题为力扣的题目号,或者系列中的编号
风筝_
这个作者很懒,什么都没留下…
展开
-
力扣滑动窗口
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/yi-ge-mo-ban-miao-sha-10dao-zhong-deng-n-sb0x/原创 2021-08-30 19:32:44 · 76 阅读 · 0 评论 -
剑指offer 03.数组中重复的数字
方法1:使用哈希表记录数组中的各个数字,当查到重复数字则直接返回class Solution {public: int findRepeatNumber(vector<int>& nums) { int n=nums.size(); //计算数组的长度 unordered_map<int,bool> um; //初始值为false for(int i=0;i<n;i++) {原创 2021-07-04 22:55:57 · 72 阅读 · 0 评论 -
ip地址和数字互相转换
#include <bits/stdc++.h>using namespace std;unsigned int ipToInt(string &ip){ int l=ip.size(); //字符串的长度 vector<int> iplist; //存储分割的字段 for(int i=0;i<l;i++) { int j=i; while(j<l && ip[j.原创 2021-03-22 16:56:32 · 376 阅读 · 0 评论 -
字符串匹配算法
字符串匹配算法原创 2021-03-19 18:53:22 · 55 阅读 · 0 评论 -
LeetCode112和113.路径总和
LeetCode112方法1:递归class Solution {private: bool traversal(TreeNode* cur, int count) { if (!cur->left && !cur->right && count == 0) return true; // 遇到叶子节点,并且计数为0 if (!cur->left && !cur->right) ret原创 2021-03-15 14:27:28 · 82 阅读 · 0 评论 -
力扣110. 平衡二叉树
方法1:自顶向下,会重复计算定义一个求树的深度的函数/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(原创 2021-03-15 11:16:53 · 82 阅读 · 0 评论 -
剑指offer 54、二叉搜索树的第k大节点
方法1:中序反向遍历,找到后还会继续遍历class Solution {public: int kthLargest(TreeNode* root, int k) { int result = 0; dfs(root, result, k); return result; }private: void dfs(TreeNode *root, int &result, int &k) { if原创 2021-03-15 10:52:24 · 68 阅读 · 0 评论 -
树相关
目录LeetCode104.二叉树的最大深度方法1:递归方法2:层序遍历LeetCode 559.N叉树的最大深度方法1:递归方法2:层序遍历剑指offer 55-II 平衡二叉树方法1:递归LeetCode104.二叉树的最大深度二叉树的最大深度等于左子树和右子树深度的最大值+1方法1:递归采用类似后续遍历的方法,因为要先知道左子树和右子树的深度,才能知道总的高度。class Solution {public: int maxDepth(Tr原创 2021-03-11 20:31:19 · 76 阅读 · 0 评论 -
剑指offer 09 两个栈实现队列
思路:入队时,直接进到A中出队时,看B是否为空,若不是空,直接从B弹出结果否则,看A是否为空,如果为空,说明目前没有元素,返回-1否则,将A中的元素逐个出栈,放到B中,弹出B栈顶元素,即为结果。class CQueue {public: stack<int>A,B; CQueue() { } void appendTail(int value) { A.push(value); } i.原创 2021-03-11 15:09:03 · 61 阅读 · 0 评论 -
LeetCode 622.设计循环队列
方法1:使用数组:class MyCircularQueue {private: int front=0; //指向队列头部第1个有效数据的位置 int rear=0; //指向最后一个有效数据的下一个位置,即下一个从队尾入队元素的位置 int *queue; int k;public: /** Initialize your data structure here. Set the size of the queue to be k. */原创 2021-03-11 14:58:36 · 64 阅读 · 0 评论 -
贪心算法
力扣455.分发饼干方法1:排序+贪心class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(),g.end()); sort(s.begin(),s.end()); int g1=g.size()-1; int s1=s.size()-1; ...原创 2021-03-11 08:48:28 · 100 阅读 · 0 评论 -
动态规划II
目录力扣343 整数拆分方法1:动态规划力扣279.完全平方数方法1:动态规划力扣343 整数拆分方法1:动态规划class Solution {public:int max3(int x,int y,int z){ return max(x,max(y,z)); //return x>y?x:(y>z?y:z); //错误的} int integerBreak(int n) { vector<int>原创 2021-03-10 19:17:34 · 61 阅读 · 0 评论 -
动态规划
class Solution {public: int fib(int n) { vector<int> dp; for(int i=0;i<=n;++i){ //确定初始条件 if(i==0) dp.push_back(0); else if(i==1) dp.push_back(1); ...原创 2021-03-10 09:28:51 · 242 阅读 · 0 评论 -
LeetCode460 LFU缓存
struct Node { //双向链表的节点 int key; //键 int val; //值 int freq; //频率 Node* prev; //前一个节点 Node* next; //后一个节点 //无参构造函数 Node () : key(-1), val(-1), freq(0), prev(nullptr), next(nullptr) {} //带参构造函数 Node (int _k, ...原创 2021-03-06 19:28:09 · 77 阅读 · 0 评论 -
LeetCode 146 LRU缓存机制
方法1:利用C++自带的双向链表list和散列表unordered_mapclass LRUCache {public: LRUCache(int capacity) : cap(capacity) { //构造函数 } int get(int key) { if (map.find(key) == map.end()) return -1; //找不到,返回-1 (使用哈希表提高查找速率) auto key_value =原创 2021-03-06 18:59:12 · 157 阅读 · 0 评论 -
4-5
LeetCode454class Solution {public: int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) { int ans=0; unordered_map<int,int> um; //设置查找表 for(int i=0...原创 2021-03-04 21:59:41 · 81 阅读 · 1 评论 -
4-4查找表
目录LeetCode1 easyLeetCode15 mediumLeetCode18 mediumLeetCode16 mediumLeetCode1 easy方法1:暴力class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; for(int i=0;i&原创 2021-03-04 20:35:40 · 120 阅读 · 1 评论 -
4-1/4-3set和map的使用
目录LeetCode349 easyLeetCode350 easyLeetCode242 easyLeetCode202 easyLeetCode290 easyLeetCode205 easyLeetCode451 mediumLeetCode349 easy方法1:使用setclass Solution {public: vector<int> intersection(vector<int>& nums1, vect原创 2021-03-04 13:09:36 · 147 阅读 · 1 评论 -
3-7/3-8滑动窗口
LeetCode209方法1:暴力法class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { //暴力法 int n=nums.size(); int sum=0; int ret=n+1; for(int i=0;i<n;i++) { su...原创 2021-03-03 21:22:09 · 178 阅读 · 1 评论 -
3-6对撞指针
目录LeetCode 167两数之和 II - 输入有序数组LeetCode 125验证回文串LeetCode 344反转字符串LeetCode 345反转字符串中的元音字母LeetCode 11盛最多水的容器LeetCode 167两数之和 II - 输入有序数组解法1:暴力 该方法超时class Solution {public: vector<int> twoSum(vector<int>& nu...原创 2021-03-03 15:55:15 · 182 阅读 · 0 评论 -
LeetCode283、移动0
方法1:class Solution {public: void moveZeroes(vector<int>& nums) { int k=0; //nums[0...k)非0 //遍历到第i个元素后,保证[0...i)中所有非0元素都按照顺序排列在[0...k)中 for(int i=0;i<nums.size();i++) { if(nums[i])原创 2021-03-02 16:51:58 · 71 阅读 · 0 评论 -
二分查找的迭代和递归形式
迭代形式:递归形式:原创 2021-03-02 15:04:30 · 156 阅读 · 0 评论 -
力扣215.数组中的第K个最大元素
方法1:采用快排的思想:class Solution {public: int partition(vector<int>& nums,int l,int r) { int v=nums[l]; int j=l; for(int i=l+1;i<=r;i++) { if(nums[i]>=v) { swap(n原创 2021-02-20 17:38:36 · 125 阅读 · 1 评论 -
力扣493.翻转对
翻转对原创 2021-02-20 12:49:59 · 130 阅读 · 0 评论 -
剑指offer 51.数组中的逆序对
方法1:暴力方法class Solution {public: int reversePairs(vector<int>& nums) { //暴力法 int n=nums.size(); int res=0; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) {原创 2021-02-20 12:26:55 · 58 阅读 · 0 评论 -
LeetCode01:两数之和
方法1:暴力法class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; int n=nums.size(); int i=0,j=0; for(i=0;i<n-1;i++) { for(j=i+1;j<...原创 2021-02-01 12:41:48 · 132 阅读 · 0 评论 -
(数组)LeetCode27.移除元素
参考:原创 2021-01-31 09:48:40 · 74 阅读 · 0 评论 -
(数组)LeetCode35-搜索插入位置
参考:原创 2021-01-31 08:00:57 · 74 阅读 · 0 评论