4月24日~4月26日学习总结

news2024/11/23 22:46:10

一,刷题目情况,已经完成了8道题目,对于其中一些题目做一下题解。

这个题目的意思是找到的两个位置l和r,为了做到这个数组的l到r的子数组经过排序后,会变成输入的另外一个数组,这个题目的思路就是首先找到在两个数组中 第一个不相同的元素和最后一个不相同的元素。然后把这个子数组进行排序,排序完后,向两边扩展如果扩展后还是符合升序,就添加不然就终止。

代码如下

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

// 判断位置 i 是否在排序后的子数组内
bool inRange(int i, int l, int r) {
    return l <= i && i <= r;
}

// 查找可行的 l 值
int findL(const vector<int>& a, const vector<int>& ap, int start, int end) {
    int l = start;
    for (int i = start; i <= end; i++) {
        if (ap[i] < a[i]) {
            l = start;
            break;
        }
    }
    return l;
}

// 查找可行的 r 值
int findR(const vector<int>& a, const vector<int>& ap, int start, int end) {
    int r = end;
    for (int i = end; i >= start; i--) {
        if (ap[i] < a[i]) {
            r = end;
            break;
        }
    }
    return r;
}
int main() {
    int t;
    cin >> t;
    while (t--) {
          int n;
		    cin >> n;
		    vector<int> a(n);
		    vector<int> ap(n);
		
		    // 读取原始数组 a 和排序后的数组 ap
		    for (int i = 0; i < n; i++) {
		        cin >> a[i];
		    }
		    for (int i = 0; i < n; i++) {
		        cin >> ap[i];
		    }
		
		    // 找到第一个不同的元素
		    int start = -1;
		    for (int i = 0; i < n; i++) {
		        if (a[i] != ap[i]) {
		            start = i;
		            for(int j=i;j>=0;j--){
						if(a[j]>a[start]||ap[j]>ap[start]){
							break;
						}
						start =j;
					}
		            break;
		        }
		    }
		
		    // 找到最后一个不同的元素
		    int end = -1;
		    for (int i = n-1; i >= 0; i--) {
		        if (a[i] != ap[i]) {
		            end = i;
		            for(int j=i;j<n;j++){
						if(a[j]<a[end]||ap[j]<ap[end]){
						break;
						}
						end =j;
						}
		            break;
		        }
		    }
		
		    // 如果整个数组都相同,则输出 1 和 n-1
		    if (start == -1 && end == -1) {
		        cout << "1 " << n-1 << endl;
		    } else {
		        // 找到 l 和 r 的值
		        int l = findL(a, ap, start, end);
		        int r = findR(a, ap, start, end);
		
		        // 输出 l 和 r 的值
		        cout << l+1 << " " << r+1 << endl;
		    }
    }
    return 0;
}

 

这个题目的题意是把 每一组数据不断的只与后面做减法,求出绝对值,如果直接使用代码模拟这个过程的话时间复杂度就比较高会有超时的问题,所以思路是对于每一列进行一个排序,然后每一次都是后面减前面的数字,这样就不用考虑绝对值,所以对于每一列的数据来说,他会参与的计算计算在与他前面的数据计算时为正数,与后面的数据计算时为负数,这样使用(j-(n-1-j))*a[i][j]这个方程就可以得到在这一列数据中所有a[i][j]参与的值。每一次进行相加就可以得到结果

代码如下

#include <bits/stdc++.h>
using namespace std; 
int n,m;
int main()
{
	long long n,m;
    long long t=1;
    cin>>t;
     while(t--)
    {
      	cin >>n>>m ; 
	  	vector<vector<int>> a(m,vector<int>(n));
		  for(int i=0;i<n;i++){
		  	for(int j=0;j<m;j++){
			  	cin >> a[j][i];
			  }
		  }	
	  	long long ans =0;
	  	for(int i=0;i<m;i++){
		  	sort(a[i].begin(),a[i].end());
		  }
        for(int i=0;i<m;i++){
			for(int j=0;j<n;j++){
					ans+=(j-(n-1-j))*a[i][j];
			}
		}	  	
		cout<<ans<<endl;
    }
    return 0;
}

然后就是关于读书的情况,我是看了redis设计与实现两本书和tcp/ip协议socket编程这两本书。

关于redis:

看了客户端和服务器的相关底层实现

客户端

对于redis来说客户端分为伪客户端和客户端两种。

伪客户端是用来载入AOF文件和lua脚本的,普通客户端是连接的服务器进行数据库使用的。

所以伪客户端不需要套接字连接。

服务器clients链表连接起多个客户端状态,新添加的客户端会被放在链表的末尾。

服务器有一个输入缓冲区记录客户端发送的命令请求,这个缓冲区的大小不会超过1G.

客户端有固定大小的缓冲区和可变大小缓冲区两个缓冲区可以用,固定大小为16kb,可变大小缓冲区不能超过服务器的硬性限制。

输出缓冲区大小超过服务器硬性限制,该客户端会立即关闭,如果客户端在一定时间内一直超过服务器设置的软性设置,该客户端也会被关闭。

服务器

主要是有关服务器与客户端的交互过程。

一个命令请求从发送到完成主要包括以下步骤:

1)客户端将命令请求发送给服务器;

2)服务器读取命令请求,并分析出命令参数;

3)命令执行器根据参数查找命令的实现函数,然后执行实现函数并得出命令回复;

4)服务器将命令回复返回给客户端。

然后就是关于服务器的维护函数,serverCron,它的默认执行时间是100毫秒一次,主要处理更新服务器状态信息,处理服务器接收的SIGTERM信号,管理客户端资源和数据库状态,检查并执行持久化操作等等。

服务器从启动到能够处理客户端的命令请求需要执行以下步骤:

1)初始化服务器状态;

2)载人服务器配置;

3)初始化服务器数据结构;

4)还原数据库状态;

5)执行事件循环。

还有就是对于tcp/ip协议的了解

首先是tcp,ip协议的基本概念

这张图就可以很清楚的看出来了

可以看到不管是tcp协议还是UDP协议都是在ip协议的基础上运行的,tcp和UDP协议都是为了区分不同同一主机的不同应用程序,ip协议是用来连接两个主机的。

tcp和UDP的区别在于,

TCP协议提供了一个可信赖的字节流(reliable byte-stream)信道。TCP协议是一种面向连接(connection-oriented)的协议:在使用它进行通信之前,两个应用程序之间首先要建立一个TCP连接,这涉及相互通信的两台电脑的TCP部件间完成的握手消息(handshake message)的交换。这是保证tcp不会产生报文丢失、重复及其他错误的原因。

但是UDP协议就不一样,它只是扩展了ip协议的功能,完成在应用程序工作而不是在主机间工作。

这种区别可以由电话和邮箱形象的表示出来。

tcp相当于两个人在打电话有信息通道,双方都清楚对方现在的情况,而UDP就是派送邮件,邮件什么时候送到你手上,邮件是不是已经损坏了,我们都不清楚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/465692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【1G-6G】移动通信技术发展

移动通信技术发展 1G 早在1947年&#xff0c;贝尔实验室的科学家就提出了蜂窝通信的概念&#xff0c;在20世纪60年代对此进行了系统的实验。20世纪60年代末、70年代初开始出现了第一个蜂窝&#xff08;Cellular&#xff09;系统。蜂窝的意思是将一个大区域划分为若干个相邻的…

nodejs+vue 古诗词数字化分享平台

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1nodejs语言简介 7 2.2vue技术 8 2.3 MySQL环境配置 8 2.4 MyEclipse环境配置 9 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第…

31-基于GA遗传算法的车辆充电调度系统优化matlab程序

资源地址&#xff1a; 主要内容&#xff1a; 研究多辆电动汽车的充电调度问题&#xff0c;考虑某时段区域范围内有M 辆电动汽车发出充电请求时&#xff0c;周围有N 个充电桩可以提供充电位的调度情况。把当前调度时段电动汽车和充电桩的基本数据加载到调度中心&#xff0c;调度…

基于springboot“漫画之家”系统(附源码、设计文档)

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

Linux->管道和共享内存通信

目录 1 管道 1.1 管道是什么 1.1 匿名管道通信 1.2 父子进程通信 1.3 匿名管道实现多进程文件的写入读取 1.4 命名管道 2 共享内存 1 管道 1.1 管道是什么 管道顾名思义&#xff0c;他就是一个像是连通器一样的东西&#xff0c;原本不存在联系的东西之间建立起一定的关…

数据结构学习记录——平衡二叉树的调整(基本介绍、右单旋、左单旋、左右双旋、右左双旋、平衡因子的计算)

目录 基本介绍 右单旋 左单旋 左右双旋 右左双旋 平衡因子的计算 基本介绍 首先&#xff0c;平衡二叉树也是一棵二叉搜索树。 当我们在一棵平衡二叉树进行插入或者删除时&#xff0c;可能会把原来的平衡二叉树变得不平衡&#xff0c; 这个时候我们就需要进行调整了。…

《个人博客部署上线教程一》Halo搭建个人博客网站

Halo搭建个人博客网站 一、docker部署Halo 目前测试了两种方法安装Halo&#xff0c;第一种是使用Jar包安装:提供JAR包资源&#xff0c;不过因为使用jar包部署需要Java11才可以&#xff0c;我本机使用的是Java8&#xff0c;所以暂时不做调整。第二种是通过docker安装。 1.1 启…

MySQL的学习小结

SQL技巧总结 表连接要展示的最终结果放在前面的select语句里面 小表提取在前面&#xff0c;大表在后面连接 表连接实例 连接查询的时候&#xff0c;注意 on 后面跟的 and 条件是连接条件 &#xff0c;如果要连接后查询 where 可以用 selecter.exam_id,count(distinct er.ui…

C++入门基础知识[博客园长期更新......]

0.博客园链接 博客的最新内容都在博客园当中&#xff0c;所有内容均为原创(博客园、CSDN同步更新)。 C知识点集合 1.命名空间 在往后的C编程中&#xff0c;将会存在大量的变量和函数&#xff0c;因为有大量的变量和函数&#xff0c;所以C的库会非常多。那么在C语言编程中&a…

宽带IPTV一线复用

宽带IPTV一线复用 1、前言 为了解决家里电视墙只预留了一个网口&#xff0c;IPTV无法与路由器共存的问题。 网络环境&#xff1a;中国联通 作者使用的路由器&#xff1a;云易家AX18C 2、光猫获取超管密码 黑龙江&#xff1a;hljcuadmin 重庆&#xff1a;cqadmin 浙江&…

Java笔记_12(集合进阶)

Java笔记_12 一、集合的体系结构二、Collection2.1、迭代器遍历2.2、增强for遍历2.3、Lambda表达式遍历 三、list集合3.1、List集合的特有方法3.2、 List集合的遍历方式 四、数据结构4.1、数据结构概述4.2、栈4.3、队列4.4、数组4.5、链表4.6、树二叉查找树平衡二叉树 4.7、红黑…

Linux系列讲解 —— SSH登录

讲解一下ssh远程登陆的基础知识。 目录 0. 基本原理1. 安装ssh程序&#xff1a;1.1 windows平台(Win10)1.2 Linux平台(Ubuntu18.04) 2. 密码方式远程登录3. 密钥方式远程登录3.1 生成私钥公钥对3.2 将公钥复制到远程机器3.3 尝试ssh远程登录 4. 常见问题4.1 sun192.168.1.21: P…

Pycharm卡顿、反应慢、CPU占用高

环境&#xff1a; Windows10 22H2 pycharm 2020.1.5专业版 pytorch1.10.1 这是第二次遇到这个问题了&#xff0c;之前尝试过更换pycharm版本&#xff0c;问题是解决了&#xff0c;但是又出现了其他bug。今天研究了半天&#xff0c;使用排除法确定了问题所在。 网上的解决方案…

opencv之图像遍历方法详解

1.IplImage IplImage是OpenCV2、3 中CxCore部分基础的数据结构&#xff0c;用来表示图像。IplImage结构体如下所示&#xff1a; typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; /* 版本 (0)*/ int nChannels; /* 大多数OPE…

LeetCode DFS算法求解联通分量数——省份数量

省份数量 题目要求 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份 是一组直接或间接相连的城市&#xff0c;组内不含其他没有相连…

编译时不好的注释会让代码丢失并产生问题

写在之前 这篇文章是上一篇文章的后续事件&#xff0c;记录的事情也挺有意思。想看事情如何开始的点击链接 频繁GC引起卡顿问题排查与解决 进入正题 不知道有没有人遇到过编译后部分代码缺失呢&#xff1f;反正我遇到了&#xff0c; 上一篇文章提到了因为开发人员写了死循环…

Docker安装mysql8.0文档

第一步需要安装Docker基础环境&#xff0c;具体可以看看这篇 docker基础篇 第二步&#xff0c;拉取mysql8.0的镜像 docker pull mysql:8.0 第三步&#xff0c;镜像启动和文件挂载 复制下面命令执行&#xff0c;33006是对外访问暴露的端口&#xff0c;当然你也可以设置为3306…

【Hello Network】HTTP协议

作者&#xff1a;小萌新 专栏&#xff1a;网络 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;较为详细的介绍HTTP协议 HTTP协议 HTTP协议HTTP协议概念URL概念urlencode和urldecodeHTTP协议格式HTTP请求协议格式HTTP响应格式 HTTP的方法HTTP状态…

04-26 每日一题 1031. 两个非重叠子数组的最大和 学习反思

1031. 两个非重叠子数组的最大和 类似问题转换 考虑一个问题&#xff0c;如何求得数组中两个数的最大和。 可以固定一个数&#xff0c;然后向右遍历如下&#xff0c;可以求得目标数组中两个数的最大和为 15 把思路实现为代码 实现过程&#xff0c;如上图所示过程&#xff0…

【汽车品牌案例02-设置右侧索引 Objective-C语言】

一、刚才我们说了一下,如何把那个汽车品牌加载起来,我们使用了一个模型的嵌套,以及我们在创建单元格的时候,是不是指定了一个,单元格的可重用ID吧, 1.根据重用ID来创建单元格,那么我们运行的时候,已经能把这个大致的效果做出来了, 大致就是这么一个效果, 接下来,还…