第一次习题总结

news2024/10/6 4:02:33

目录

求第K个数

 求逆序对的数量

 数的三次方根

  一维前缀和

 二维前缀和(子矩阵的和)


 

求第K个数

 

 思路:用快速选择,时间复杂度为O(N)

 sl和sr是左边和右边数的个数,当k<=sl,即倒数第K个数在左边范围内,递归左边,反之,递归右边,递归右边的时候k传参时要变为k-sl,因为递归时候已经排好序,在整体中是找第k个小的,但对于右边的单独数组来说,是找k-sl位置的(这里按从小到大的排序)

#include<iostream>
using namespace std;
const int N = 100010;
int arr[N];
int quick_sort(int l,int r,int k)
{
	if (l == r)
		return arr[l];//当只有一个数的时候随便返回左右都可以
	int i = l - 1;
	int j = r + 1;
	while (i<j)
	{
		while (arr[++i] < arr[l]);
		while (arr[--j] > arr[l]);
		if (i<j)
		{
			swap(arr[i], arr[j]);
		}
	}
	int sl = j - l + 1;
	if (k <= sl) return quick_sort(l, j, k);
	else return quick_sort(j + 1, r, k-sl);
}
int main()
{
	int n, k;//n个数中找倒数第k小的
	cin >> n >> k;
	for (int i = 0; i < n; ++i)
	{
		cin >> arr[i];
	}
	cout<<quick_sort(0, n - 1, k)<<endl;
	return 0;
}

 求逆序对的数量

 如从5 3 2 1 4中随机选俩个数,选的第一个数>第二个数,则这对数字称为逆序对

 

分为三种情况:左左,右右,一左一右

第三种情况(一左一右):我们在左边找比右边第一个大的数字,结果记为s1,若右边有m个数,则总共有s1+s2+s3......+sm个逆序对 

s1和s2.....sm如何计算?

由于我们是用递归的方法将数组有序化的,如要找比下标为j大的数,我们只需找到第一个比它大的数即可,下标记作i,这样i一直到结尾的数字都比j大(因为我们拍好了序),只需计算出左边最后一个数字到i的个数即可

 sj计算思路,由于上面的数组最左边是mid,则i到mid的数总共是mid-i+1个

 若有n个数字,从大到小排列,如n,n-1,n-2,n-3......1,逆序对的数量为n(n-1)/2对,下题把n=100000带进去。

  

#include<iostream>
using namespace std;
typedef long long LL;
const int N = 100010;
int arr[N],temp[N];
LL merge_sort(int l, int r)
{
	if (l >= r)
		return 0;
	int mid = (l + r) / 2;
	LL res = merge_sort(l, mid) + merge_sort(mid + 1, r);
	int i = l,j=mid+1,k=0;
	while (i <= mid && j <= r)
	{
		if (arr[i] < arr[j])
			temp[k++] = arr[i++];
		else
		{
			temp[k++] = arr[j++];
			res = mid - i + 1;
		}
	}
	while (i <= mid) temp[k++] = arr[i++];
	while (j <= r) temp[k++] = arr[j++];
	for (int i = l, j = 0; i <= r; i++, j++)//把数组恢复
		arr[i] = temp[j];
	return res;
}
int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; ++i)
		cin >> arr[i];
	cout<<merge_sort(0, n - 1)<<endl;
	return 0;
}

 数的三次方根

 

 

 中间值为m,m³数学符号≥x,就说明m>=三次根号下x,即三次根号下x在m的左半边,我们把整个区间更新成左区间即可(左端点不动,右端点为m)。反之,更新右端点。

这里要保留六位小数,为保险起见,我们再多保留俩位,即保留8为,这种题,一般都会选择多保留俩位小数。

#include<iostream>
using namespace std;
int main()
{
	double x;
	cin >> x;
	double l = -10000, r = 10000;
	while (r-l>1e-8)
	{
		double mid = (l + r) / 2;
		if (mid * mid * mid >= x)
		{
			r = mid;
		}
		else
			l = mid;
	}
	printf("%lf\n", l);//printf默认保留六位小数
	return 0;
}

  一维前缀和

  

#include<iostream>
using namespace std;
const int N = 100010;
int arr[N], s[N];
int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; ++i)
		cin >> arr[i];
	for (int i = 1; i <= n; ++i)
		s[i] = s[i - 1] + arr[i];
	int l, r;
	while (m--)
	{
		cin >> l >> r;
		cout << s[r] - s[l - 1] << endl;
	}
	return 0;
}

 二维前缀和(子矩阵的和)

 

#include<iostream>
using namespace std;
const int N = 1010;
int main()
{
	int n, m, q;
	scanf("%d%d%d", &n, &m, &q);//确定二维数组大小
	int arr1[N][N];
	int s[N][N];
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			scanf("%d", &arr1[i][j]);
		}
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + arr1[i][j];//某点的区域面积,确定大区域
		}
	}
	while (q--)
	{
		int x1, x2, y1, y2;//某个特定的小区域(在大区域中的小区域)
		scanf("%d%d%d%d", &x1, &y1, &x2, &y2);//x2,y2是最右边的点
		printf("%d\n", s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1]);
	}
	return 0;
}

  

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

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

相关文章

【JY】减隔震设计思考:隔震篇

【写在前文】随着隔标颁布&#xff0c;国内外大大小小的地震的经历。越来越多的人重视减隔震分析和设计&#xff0c;也听到不少的疑惑声音&#xff0c;个人也有一点热点问题的感悟与大家分享。在个人看来&#xff1a;建筑减隔震&#xff1a;七分构造三分算&#xff01;特别注意…

[Netty源码] Netty轻量级对象池实现分析 (十三)

文章目录1.对象池技术介绍2.如何实现对象池3.Netty对象池实现分析3.1 Recycler3.2 Handler3.3 Stack3.4 WeakOrderQueue3.5 Link4.总结1.对象池技术介绍 对象池其实就是缓存一些对象从而避免大量创建同一个类型的对象, 类似线程池。对象池缓存了一些已经创建好的对象, 避免需要…

uni-app--》什么是uniapp?如何开发uniapp?

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

企业电子招投标采购系统源码——功能模块功能描述+数字化采购管理 采购招投标

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外…

HTTP API接口设计规范

1. 所有请求使用POST方法 使用post&#xff0c;相对于get的query string&#xff0c;可以支持复杂类型的请求参数。例如日常项目中碰到get请求参数为数组类型的情况。 便于对请求和响应统一做签名、加密、日志等处理 2. URL规则 URL中只能含有英文&#xff0c;使用英文单词或…

Docker配置DL envs教程

Docker容器与镜像的区别 Docker镜像类似于虚拟镜像&#xff0c;是一个只读的文件&#xff0c;包括进程需要运行所需要的可执行文件、依赖软件、库文件、配置文件等等。 而容器则是基于镜像创建的进程&#xff0c;可以利用容器来运行应用。 总结来说&#xff0c;镜像只读&#…

贾俊平《统计学》第七章知识点总结及课后习题答案

一.考点归纳 参数估计的基本原理 1置信区间 &#xff08;1&#xff09;置信水平为95%的置信区间的含义&#xff1a;用某种方法构造的所有区间中有95%的区间包含总体参数的真值。&#xff08;2&#xff09;置信度愈高&#xff08;即估计的可靠性愈高&#xff09;&#xff0c;则…

ABeam News | ABeam Consulting 荣获『SAP AWARD OF EXCELLENCE 2023』奖项

ABeam Consulting株式会社&#xff08;总裁兼CEO 鸭居 达哉、东京都千代田区、以下简称为ABeam Consulting&#xff09;在SAP 日本株式会社&#xff08;董事长 铃木洋史、东京都千代田区、以下简称为SAP日本&#xff09;表彰优秀合作伙伴的颁奖『SAP AWARD OF EXCELLENCE 2023』…

c3p0报错java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector

1. 问题由来 今天第一次学习到c3p0的时候&#xff0c;学习资料上使用的是0.9.1.2版本。 我偷懒使用的是0.9.2版本。但是运行的时候会报错&#xff1a; 网上搜索了一下这个错误&#xff0c;很多人说去安装mchange-commons-0.2.jar 这个包 但是我看学习资料上没有去另外安装这…

nodejs+vue 图书借阅管理系统

该系统的应用可以减少工作人员的劳动强度&#xff0c;提高工作效率与管理水平&#xff0c;具有很大的价值。它可以使图书这项借阅业务操作简单&#xff0c;成功率高&#xff0c;使网上图书管理系统的管理工作向一个新的层次迈进。本论文是以构建图书借阅为目标&#xff0c;使用…

《100天精通Python丨从快速入门到黑科技》 >>> 目录导航

文章目录一、100 天精通 Python 丨基础知识篇100 天精通 Python 丨基础知识篇 —— 01、C 站最全 Python 标准库总结100 天精通 Python 丨基础知识篇 —— 02、Python 和 Pycharm&#xff08;语言特点、学习方法、工具安装&#xff09;100 天精通 Python 丨基础知识篇 —— 03、…

基于AIGC的3D场景创作引擎概述

通过改变3D场景制作流程复杂、成本高、门槛高、流动性差的现状&#xff0c;让商家像玩转2D一样去玩转3D&#xff0c;让普通消费者也能参与到3D内容创作和消费中&#xff0c;真正实现内容生产模式从PGC/UGC过渡到AIGC&#xff0c;是我们3D场景智能创作引擎一直追求的目标。前言随…

【VMD-SSA-LSSVM】基于变分模态分解与麻雀优化Lssvm的负荷预测【多变量】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【C++基础】引用(引用的概念;引用的特性;常引用;使用场景:做输出型参数、大对象传参、做输出型返回值、返回大对象的引用);引用和指针的区别)

六、引用 6.1 引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。&#xff08;语法上&#xff09; 格式&#xff1a;类型& 引用变量名(对象名) …

矮床酸阻滞技术及其在酸回收行业的应用

废酸是如何产生的&#xff1f; 为什么要进行废酸回收&#xff1f; 在轧钢厂在轧制过程中&#xff0c;铁与氧或铁与燃料燃烧时的生成物(CO2、H2O等)的化学作用&#xff0c;而形成一层氧化层&#xff0c;称为氧化皮。其实我们日常生活中接触到的金属件&#xff0c;尤其是铁件上的…

mmsegmentation 训练自己的数据集

一. MMSegmentation是什么&#xff1f; MMSegmentation 是一个基于 PyTorch 的语义分割开源工具箱&#xff0c;它是 OpenMMLab 项目的一部分。他与MMDetection类似&#xff0c;集成了各种语义分割算法&#xff0c;可以快速验证语义分割效果。 二. 环境准备 参考&#xff1a…

【C++】模版(一)

泛型编程、模版&#xff08;一&#xff09;&#xff1a; 1.泛型编程&#xff1a; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp left;left right;right temp; }【…

电脑软件:office文档密码了怎么办,看完你就能自己找回了

Word、Excel、PPT作为大家日常办公的使用最频繁的办公软件。对于一些涉及个人隐私或者涉及企业机密性的文档文件&#xff0c;我们经常会给自己的文档加上密码。 但有时候文档时间比较久了、或者密码太多了&#xff0c;有时候我们会把文档的密码给忘记了&#xff0c;如果密码忘…

Shell练习

一、题目 1、编写函数&#xff0c;实现打印绿色OK和红色FAILED 判断是否有参数&#xff0c;存在为Ok&#xff0c;不存在为FAILED 2、编写函数&#xff0c;实现判断是否无位置参数&#xff0c;如无参数&#xff0c;提示错误 3、编写函数实现两个数字做为参数&#xff0c;返回最…

【大数据之Hadoop】十一、MapReduce之Shuffle、MapTask、ReduceTask工作机制

1 Shuffle机制 对于排序而言分为两个阶段&#xff0c;MapTask后和ReduceTask前。 2 MapTask工作机制 MapTask并行度由切片个数决定&#xff1b;切片个数由切片大小&#xff08;切片大小取决于块大小、maxsize&#xff08;Long的最大值&#xff09;和minsize&#xff08;默认为…