算法基础01 排序+二分
1.排序1.快速排序
快速排序利用了递归的思想。
定义头指针,如果头指针对应的数 < arr[mid],l++,直到遇到大于等于 num的数。
定义尾指针,如果尾指针对应的数 > arr[mid],r–,直到遇到小于等于num的数。
当双方各遇到不符合条件的停止循环,进行数值交换。
每一轮循环会把路径上遇到的大于 arr[mid]的数放到右边,小于的放左边。
最后再次分置,再次递归以上过程,最后遇到 两个元素的组合(再往下递归,l = r,直接停止),假如是
元素
1
3
下标
4
5
mid取4,arr[mid] 为 1,头指针不满足 < 1的条件,则l不动;
尾指针满足 > 1的条件,尾指针 –,然后 头尾相等,结束循环;
实际顺序不变,因为就是 小到大。
元素
3
1
下标
4
5
加入为 3 ,1
头指针不满足 < 1,尾指针不满足 >1,且满足 头 < 尾,则交换元素。
12345678910111213141516171819202122232425262728293031 ...
hexo部署到远程服务器
1.配置免密登录「注意事项:」
注意一定要在当前登录用户的根目录下的.ssh放置公钥才有用!例如普通用户别去root的根目录下.ssh放置公钥,没有用!!!
另外自行创建.ssh文件夹会出现各种权限问题,最好使用命令
12// 远程主机同样使用此命令ssh-keygen -t rsa -C "2513177689@qq.com"
为本机生成钥匙对的同时顺带生成.ssh文件夹。
「方法:」
使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机。
ssh-keygen 创建公钥和密钥。
ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。
ssh-copy-id 也会给远程主机的用户主目录(home)和/.ssh, 和/.ssh/authorized_keys设置合适的权限 。
步骤1: 用 ssh-key-gen 在本地主机上创建公钥和密钥
1ssh-keygen -t rsa -C "2513177689 ...
代码随想录训练营Day04_链表part2
1.两两交换链表中的节点
引用:代码随想录 (programmercarl.com)
力扣题目链接
建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。
初始时,cur指向虚拟头结点,然后进行如下三步:
操作之后,链表如下:
看这个可能就更直观一些了:
12345678910111213141516171819class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点 dummyHead->next = head; // 将虚拟头结点指向head,这样方便后面做删除操作 ListNode* cur = dummyHead; while(cur->next != nullptr && cur->next->next != nullptr) ...
蓝桥杯备赛选题——聪明的小羊肖恩
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 ...