
Leetcode刷题
Zhansijing
这个作者很懒,什么都没留下…
展开
-
贪心算法总结
贪心算法先找到局部最优,然后全局最优简答题:Leetcode338.分发饼干Leetcode 1005.K次取反后最大化的数组和Leetcode 860.柠檬水找零Leetcode 605.种花问题中等题:Leetcode 376.摆动序列Leetcode 738单调递增的数字股票问题:Leetcode121.买卖股票的最佳时机Leetcode122.买卖股票的最佳时机||Leetcode714.买卖股票的最佳时机含手续费两个维度权衡问题:考虑如何遍历二维数组,先从原创 2021-10-14 19:55:31 · 208 阅读 · 0 评论 -
回溯算法总结
回溯法回溯法:暴力解法,遍历问题的所有方案不行就返回。即遍历+递归。常见的问题:组合问题:N个数里面按一定规则找出k个数的集合。排列问题:N个数按照一定规则全排列切割问题:一个字符串按照一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,数独问题。解题模板可以讲回溯的题目抽象为树形结构,便于理解void backtracking(参数){ if(终止条件) { 存放结果; return; } for(选择:本层集合中元素原创 2021-10-05 21:39:12 · 241 阅读 · 0 评论 -
字符串总结
1,字符串常用的操作:反转,替换等。Leetcode 344 反转字符串Leetcode 541 反转字符串||剑指offer 05 替换空格数组填充类问题 ,预先给数组扩容带填充后的大小,然后在从后向前进行操作Leetcode 151 反转字符串里的单词剑指offer 58 -||左旋转字符串2,KMP算法,字符串匹配算法重点求对应的Next数组,然后回退Leetcode 28 实现strStr()Leetcode 459 重复的子字符串3,其他相关操作Leetcode原创 2021-09-19 16:06:28 · 257 阅读 · 0 评论 -
哈希表总结
哈希表用于快速判断一个元素是否出现在集合中。哈希函数哈希碰撞:拉链法,线性探测法常见的哈希结构:数组set(key)map(key,value)底层实现:set/map :红黑树,key有序,数值不可重复,不可修改,查询效率O(logn),增删(Ologn)multiset/multimap:红黑树,key有序,数值可重复,O(nlogn),O(nlogn)unordered_set/unordered_map:哈希表,key无序,数值不可重复,O(1),O(1)经典题目数组原创 2021-09-16 09:51:14 · 184 阅读 · 0 评论 -
栈和队列总结
栈和队列栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的,也就是栈底层可用vector,deque,list,主要就是数组或者链表的底层实现在SGI STL,默认情况下是使用deque为底层实现栈的基础Leetcode232 用栈实现队列Leetcode225 用队列实现栈Leetcode 155最小栈经典问题匹配问题Leetcode 20有效的括号Leetcode 1047 删除字符串中的所有相邻重复项Leetcode 150 逆波兰表达式求值原创 2021-09-10 11:49:35 · 115 阅读 · 0 评论 -
树相关题型总结
树二叉树一,二叉树遍历 (迭代 or 递归)先序遍历 ----自顶向下递归preorder(Treenode *root){ if(root==null) { 边界内容 } 处理 preorder(root->left); preorder(root->right);}迭代 栈 后进先出vector preorderTraversal(TreeNode* root) {vector res;stack<TreeNo原创 2021-09-06 21:49:45 · 155 阅读 · 0 评论 -
链表操作总结
链表1,基本操作(1)插入给定指针:插入位置的前驱节点pre .若没有则需要先遍历到该节点。temp=pre->next;pre->next=new;//new表示新插入的节点new->next=temp;(2)删除要注意删除的位置,例如位于链表尾部时的边界条件pre->next=new->next->next;//new表示删除的节点(3)遍历迭代遍历cur=head;while(cur!=null){ cout<<cur-原创 2021-08-23 19:57:09 · 405 阅读 · 0 评论 -
Leetcode 565. 数组嵌套
题目描述:Leetcode解题思路:方法一:遍历数组时间复杂度O(n^2),空间O(1)class Solution {public: int arrayNesting(vector<int>& nums) { int count = 0, max = 0; int start,j; for (int i = 0; i < nums.size();i++) { count原创 2021-08-17 17:05:10 · 129 阅读 · 0 评论 -
Leetcode 766.托普利茨矩阵
题目描述:Leetcode解题思路:要判断对角线上的数字是否相等,可以采用遍历数组的方式,逐行判断,对角线下一行的元素要等于上一行的元素。class Solution {public: bool isToeplitzMatrix(vector<vector<int>>& matrix) { int row=matrix.size(),col=matrix[0].size(); for(int i=1;i<row;i++原创 2021-08-15 23:46:49 · 160 阅读 · 0 评论 -
Leetcode 287.寻找重复数
题目描述Leetcode解题思路:假设输入的数组为A=[1,3,4,2,2],由题目可知,该数组原来的形式为S=[1,2,3,4,_].因此我们可以得到该数组的最大值n和最小值1.遍历数组S,小于等于1的个数为1,小于等于2的个数为2,…,小于等于4的个数为4.但是由于数组中加入了重复的数,遍历数组A中可以发现,小于等于1的个数为1,小于等于2的个数为3,小于等于3的个数为4,…说明重复的数就存在小于等于2的范围内,因此要如何定位这个重复数?二分法low=1.high=4,mid=2,n原创 2021-08-14 15:45:06 · 131 阅读 · 0 评论 -
Leetcode 645. 错误的集合
题目描述:Leetcode解题思路:方法一:时间复杂度O(NlogN)该数组存储的是[1,n]的所有整数!!!1,先对数组进行排序2,找出重复数字3,找到缺少的数,(1)当丢失的数字不为1或者n时,判断相邻两个位置的差(2)当丢失的数字为1或者n时,特殊处理方法二:交换数组元素,时间O(N),O(1)还没看懂…#include<iostream>#include<vector>#include <algorithm>using namesp原创 2021-08-13 11:44:59 · 141 阅读 · 0 评论 -
Leetcode 378. 有序矩阵中第 K 小的元素
题目描述:Leetcode解题思路:二分法如上图所示 ,因为该矩阵行列都是从小到大排列的,我们可以知道该矩阵的最大值15和最小值1,因此对于任意一个mid(min<mid<max)都可以知道矩阵中大于小于该元素值的个数。例如,mid=8,我们可以知道矩阵中小于8的个数为2。用类似的思想就可以解出该题。以上图矩阵为例,求第k=8小对应的元素,实现过程如下:step 1:left=1,right=15,mid=8 count=2<k=8说明此时的范围太小,应该扩大范围step原创 2021-08-12 20:44:32 · 174 阅读 · 0 评论 -
Leetcode 240. Search a 2D Matrix II
题目描述:Leetcode解题思路:遍历整个矩阵 超时二分法(没试过)参考的解题思路:因为该矩阵行列都是升序排列,因此可以先判断target是否小于目前行的最大列,如果是则说明target可能存在于该列对应的行中;若遍历该列到target大于对应的数,说明该行不可能存在目标target,row++(因为大小是升序)。class Solution {public: bool searchMatrix(vector<vector<int>>& matr原创 2021-08-12 10:22:35 · 157 阅读 · 0 评论 -
Leetcode 485,最大连续数1的个数
题目描述:Leetcode解题思路:遍历数组,当对应的数字为0时,判断当前的连续1数目与历史的连续1数目大小。class Solution {public: int findMaxConsecutiveOnes(vector<int>& nums) { int len = nums.size(); int count = 0, i = 0, max = 0; while(i<len) {原创 2021-08-11 09:43:24 · 105 阅读 · 0 评论 -
Leetcode 566.Reshapethe matrix
题目描述:Leetcode解题思路:首先,要满足矩阵reshape的条件,即reshape后个数不变;然后,初始化一个新的数组然后遍历该数组赋值。#include<iostream>#include<string>#include<vector>using namespace std;class Solution {public: vector<vector<int>> matrixReshape(vector<v原创 2021-08-10 11:40:40 · 80 阅读 · 0 评论 -
Leetcode 283.移动零
Leetcode 283. 移动零题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数解题思路:遍历数组,先找到数组中不为0的数,然后在将数组剩余位置置0#include<iostream>#include<vector>using namespace std;clas原创 2021-08-09 16:13:02 · 109 阅读 · 0 评论