Day63 | 灵神 | 滑动窗口:将x减到0的最小操作数
Day63 | 灵神 | 滑动窗口:将x减到0的最小操作数1658.将x减到0的最小操作数1658. 将 x 减到 0 的最小操作数 -...
Day62 | 灵神 | 滑动窗口:统计得分小于K的子数组数目
Day62 | 灵神 | 滑动窗口:统计得分小于K的子数组数目2302.统计得分小于K的子数组数目2302. 统计得分小于 K 的子数组数目 - 力扣(LeetCode) 这道题目虽然是hard,但是通过前几天的做题,我个人觉得这道题反而比2962. 统计最大元素出现至少 K 次的子数组 - 力扣(LeetCode),因为这道题的统计子数组的方式比2962这道题好想很多 思路: 还是那个核心思路,固定右端点,遍历右端点,找左指针收缩的条件,这道题的收缩条件很简单,就是左右指针区间[l,r]内的数的和再乘以数量得到的数大于等于k就行。 所以思路比较简单。 另外统计子数组方式就是(r-l+1),即区间长度 举例: [2,1,4,3]如果这四个数满足条件的话,那么[1,4,3],[4,3],[3]那必然符合,那所有的子数组数量就是(r-l+1)=4咯 下面是笔者的代码,这个代码会有一个测试用例超时,咱们来看看有什么地方可以进行优化 123456789101112131415161718192021222324class Solution {public: ...
Day61 | 灵神 | 滑动窗口:统计最大元素出现至少K次的子数组
Day61 | 灵神 | 滑动窗口:统计最大元素出现至少K次的子数组2962.统计最大元素出现至少K次的子数组2962. 统计最大元素出现至少 K 次的子数组 - 力扣(LeetCode) 思路: 一开始我并没有想出来,这是笔者的代码,很遗憾超时了,因为这个和暴力的思路差不多 1234567891011121314151617181920212223class Solution {public: long long countSubarrays(vector<int>& nums, int k) { long long l=0,res=0; int max_num = ranges::max(nums),max_cnt=0; for(int i=0;i<nums.size();i++) { if(max_num==nums[i]) max_cnt++; int temp=max_cnt; ...
Day60 | 灵神 | 滑动窗口:最大连续1的个数III
Day60 | 灵神 | 滑动窗口:最大连续1的个数III1004.最大连续1的个数III1004. 最大连续1的个数 III - 力扣(LeetCode) 思路: 和前两天核心思路一样,还是固定右端点,遍历右端点,然后去找左指针往右收缩的条件。 而这个条件一般和题目条件相关。 在本题中就是要找最多翻转k个0后,数组中连续1的个数,换句话说,我们左右区间[l,r]内最多只能包含k个0,超过了就无法翻转,无法翻转就无法保证全是连续的1,。我们只需要记录碰到0的次数,只要碰到0,那么记录0的变量num_zero就++,只要碰到0的次数超过了k,那说明我们现在翻转不了这么多的0,所以我们这时候就可以移动左指针,直到我们的左右区间[l,r]内0的数量小于等于k停止。 完整代码: 1234567891011121314151617181920212223242526class Solution {public: int longestOnes(vector<int>& nums, int k) { int l=0; ...
Day59 | 灵神 | 滑动窗口:最多K个重复元素的最长子数组&&找到最长的半重复子字符串
Day59 | 灵神 | 滑动窗口:最多K个重复元素的最长子数组&&找到最长的半重复子字符串##2958.最多K个重复元素的最长子数组 2958. 最多 K 个重复元素的最长子数组 - 力扣(LeetCode) 思路: 和3. 无重复字符的最长子串 - 力扣(LeetCode)可以说是一模一样,可以查看我昨天的题解 无重复最长子串是这道题K等于2的情况而已 即左指针移动的条件是把右端点包含在好数组内时,右端点nums[i]代表的数字个数超过了k。那我们就移动左指针,直到固定右端点时整个子数组都满足数字个数小于等于k的条件。 完整代码: 12345678910111213141516171819class Solution {public: int maxSubarrayLength(vector<int>& nums, int k) { int res=0; unordered_map<int,int> p; int l=0; for(int...
Day58 | 灵神 | 滑动窗口:长度最小的子数组&&乘积小于K的子数组&&无重复字符的最长子串
Day58 | 灵神 | 滑动窗口:长度最小的子数组&&乘积小于K的子数组&&无重复字符的最长子串209.长度最小的子数组209. 长度最小的子数组 -...
26考研 | 王道 | 数据结构 | 第一章 数据结构绪论
26考研 | 王道 | 数据结构 | 第一章 数据结构绪论 1.1 数据结构的基本概念 数据:数据是信息的载体,符号的集合、所有能输入到计算机中并能被计算机程序处理的符号的集合,数据是计算机程序加工的原料。 数据元素:数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成。 数据项:构成数据元素的不可分割的最小单位。 数据对象:数据对象是具有相同性值的数据元素的集合,是数据的一个子集。 数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 举例需要理解几点: 学校里的好多类型的表:数据 单独的一张成绩单表:数据对象 成绩单中每一行有姓名、课程、班级、成绩:数据元素 成绩单中每一行的每一个表格姓名等都是一个个的数据项 1.2 数据结构的三要素1.2.1...
黑马程序员 | Git详细教程笔记 | 使用命令 | 从安装到入土
黑马程序员 | Git详细教程笔记 | 使用命令 | 从安装到入土黑马程序员Git全套教程,完整的git项目管理工具教程,一套精通git_哔哩哔哩_bilibili 笔者就看了前22p,2倍速粗略的学了一下 一、概述 Git是分布式版本控制工具 分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无 需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了。 特点: 1.速度 2.简单的设计 3.对非线性开发模式的强力支持(允许成千上万个并行开发的分支) 4.完全分布式 5.有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量) 二、工作流程图 命令如下: clone(克隆): 从远程仓库中克隆代码到本地仓库。 checkout (检出):从本地仓库中检出一个仓库分支然后进行修订。 add(添加):...
Day57 | 灵神 | 相向双指针:四数之和&&有效三角形的个数
Day57 | 灵神 | 相向双指针:四数之和&&有效三角形的个数18.四数之和18. 四数之和 - 力扣(LeetCode) 思路: 在三数之和的基础上再套了一层循环 i在最外层,然后对i去重 j,l,r就是三数之和的代码 区别在于: 1.对于第二个数字num[j]的去重:因为j是从i+1开始的,而j对j的去重只能是在j自己的遍历过程中,即,当j大于i+1时,这说明j-1>i,说明此时去重不会让j==i的情况给去掉了 2.如果数组大小小于4那就没必要列举了 3.leetcode增大了数值,要使用long long防止溢出 主要是防止四个数字相加时的溢出,所以四个数字相加时至少得有一个是long long类型 完整代码: 12345678910111213141516171819202122232425262728293031323334class Solution {public: vector<vector<int>> fourSum(vector<int>& nums,...
Day56 | 灵神 | 相向双指针:四数之和&&有效三角形的个数
Day56| 灵神 | 相向双指针:统计和小于目标的下标对数目&&最接近的三数之和2824.统计和小于目标的下标对数目2824. 统计和小于目标的下标对数目 - 力扣(LeetCode) 思路: 和两数之和思路一样 大了就r– 小了就收集答案 完整代码: 12345678910111213141516171819class Solution {public: int countPairs(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); int res=0; int l=0,r=nums.size()-1; while(l<r) { if(nums[l]+nums[r]>=target) r--; else { ...