蓝桥杯备赛选题——聪明的小羊肖恩
1.题目
2.解法2.1 正常思路
题目要求我们求出下标对(i,j) 使得ai+aj∈[L,R] 的下标对数量。根据简单的容斥原理可知,设ai+aj≤R
的下标对数量为y,ai+aj≤L-1 的下标对数量为 x, 则 ai+aj∈[L,R] 的下标对数量为y-x 。
问题转化为对于一个给定的数Z, 我们如何求出a 中满足ai+a;≤Z 的下标对数量。为了解决这个问题,我们可 以首先对数组a 进行排序。排序后,我们可以使用双指针技巧来遍历数组,并计算满足条件的下标对数量。我们定义
两个指针l 和 r, 分别表示数组a 中的左右元素下标。初始时, l=1,r=n。
接下来,我们进行如下操作:
如果a[l]+a[r]>Z, 说明当前下标对不满足条件,我们需要减小 ai+a; 的值,而数组已经有序,所以我们
将 r 减 一 ,即γ –。
如果a[l]+a[r]≤Z, 说明当前下标对以及之后的所有下标对都满足条件。我们需要计算满足条件的下标对数
量,可以通过r-l 计算。然后我们将l加一,即l++。
我们重复以上操 ...
使用腾讯云cos对象存储搭建个人专属图床
1.为什么选择腾讯云对象存储?
大厂稳定性靠谱
专业的后台保证
用就对了!!
2.搭建图床服务2.1 申请腾讯云cos对象存储腾讯云cos对象存储
1.点击购买资源包
2.选择 10GB ,一年一般足够了,计费方式看个人
3.点击创建存储桶
4.选择离自己进的地域,共有读,私有写,名字自己随意
5.下一步
6.创建完毕
代码随想录训练营Day03_链表
1.链表1.1 定义什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。
链表的入口节点称为链表的头结点也就是head。
如图所示:
1.2 链表类型单链表如上所示
双链表单链表中的指针域只能指向节点的下一个节点。
双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。
双链表 既可以向前查询也可以向后查询。
如图所示:
循环链表循环链表,顾名思义,就是链表首尾相连。
循环链表可以用来解决约瑟夫环问题。
1.3链表的实现2. 链表移除元素2.1 没有头结点的实现(按值删除)
这里以单链表为例,没有虚拟头节点为例
首先要判断头结点是否是要删除掉值,是的话让头结点指针移项head->next,之后再进行判断,直到头结点不在是需要删除的元素
之后就判断非头结点元素是否是需要删除的值
cur 为当前元素,判断cur ->next是否是需要删除的元素,因为cur从头结点出发,经过上面的判定,head一定不是需要删除的元素
如果 cur ...
代码随想录训练营Day02_数组双指针,螺旋矩阵
1.有序数组的平方
题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
1.1 暴力思路
让数组每个元素等于本身的平方
sort 从小到大排序
123456789101112// 时间复杂度 O(logn)class Solution {public: vector<int> sortedSquares(vector<int>& nums) { int len = nums.size(); for(int i = 0; i < len;++i) { nums[i] = nums[i] * nums[i]; } sort(nums.begin(),nums.end()); return nums; }};
1.2 双指针思路
图片链接: 代码随想录 (programmercarl.com)
设立一个新数组 ...
代码随想录训练营Day01_二分查找,移除元素
1.二分查找704. 二分查找 - 力扣(LeetCode)
1.1 二分查找左闭右闭形式例如, 数组为 [1,2,3,4,5,6],长度为6
left = 0, right = n -1;
我们在进行元素查找时可以让 left = right 取到右端点值进行比较的话可以采用 left<= right形式
如果是 左闭右闭形式,则right初始可以取到数组最后一位元素,则就是 right = n - 1;
while (left <= right) 要使用 <= ,因为left == right是有意义的,所以使用 <=
既然选择左闭右闭形式,则使用 while (left <= right);
在循环时,如果 arr[middle] > targht,更新右边界时,应该令 right = middle-1,因为选择了右闭, 如果 arr[middle] > targht, 则一定不会相等,再让 right ...