暑假算法刷题日记 Day 10
目录
重点整理
054、 拼数
题目描述
输入格式
输出格式
输入输出样例
核心思路
代码
055、 求第k小的数
题目描述
输入格式
输出格式
输入输出样例
核心思路
代码
总结
这几天我们主要刷了洛谷上排序算法对应的一些题目,相对来说比较简单

一共是13道题,对应我暑假刷题的043--055。当然这些题目相对来说比较简单,我们挑着重点的说。
重点整理
排序这一块的题目总体来看包括,
1. 基本的排序算法,像快速排序、分治排序,这些知识点我写了专门的博客,欢迎大家阅读
快速排序、归并排序
2. 结构题的多因素、自定义排序规则。Java实现自定义排序
3. 特殊问题
针对这个特殊问题,我们就题目来说
054、 拼数
题目描述
设有 nn 个正整数 a1…ana1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数 nn。
第二行有 nn 个整数,表示给出的 nn 个整数 aiai。
输出格式
一个正整数,表示最大的整数
输入输出样例
输入 #1复制
3 13 312 343
输出 #1复制
34331213
输入 #2复制
4 7 13 4 246
输出 #2复制对于
7424613
核心思路
本质来看还是一个自定义排序规则,但是这个题巧妙之处就是自定义的排序规则是如何确定的。对于两个字符串,如果将比较规则定义为大的放前面,那对于 321,32,这个例子来说的话,大的放前面那就是32132,但是32321要更大。所以简单的大的放前面是不合适的。
如果我们把比较规则定义为 a+b大于b+a,那么a在前面,反之b在前面。这样就避免了这个问题。
代码
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();String s[] = new String[n];for (int i = 0; i < n; i++) {s[i] = sc.next();}Arrays.sort(s,new Comparator<String>() {public int compare(String o1, String o2) {return (o2+o1).compareTo(o1+o2);}});for (int i = 0; i < n; i++) {System.out.print(s[i]);}}
}
055、 求第k小的数
题目描述
输入 nn(1≤n<50000001≤n<5000000 且 nn 为奇数)个数字 aiai(1≤ai<1091≤ai<109),输出这些数字的第 kk 小的数。最小的数是第 00 小。
请尽量不要使用 nth_element 来写本题,因为本题的重点在于练习分治算法。
输入格式
无
输出格式
无
输入输出样例
输入 #1复制
5 1 4 3 2 1 5
输出 #1复制
2
核心思路
这个题看起来并没有什么难度,但是题目给的样例卡时间,最后两个数据量太大,经典的快排和归并都会超时间。
我们回顾一下快排的思路,确定枢轴的过程是实质上就是把这个元素放到其排序后的正确位置上去,其实就是把第k小的数放在下标为k的位置上,根据这个思路我们可以在快排的代码上做优化。
我们在快排的基础上,确定好枢轴位置后,判断该位置是否是k,是的话直接结束程序,不是的话继续往后,为了节约时间,我们只排序k所在的那个区间。
代码
#include <iostream>
#include <vector>
using namespace std; const int N=5e6 +10;int nums[N];
void quickSort(int left, int right, int k) { // 判断排序区间长度 if (right <= left) { if (right == left && left == k) { cout << nums[k] << endl; exit(0); } return; } // 选择基准值(这里使用最左边的值) int pivot = nums[left]; int i = left, j = right; while (i < j) { // 从右向左找到第一个小于等于pivot的元素 while (nums[j] >= pivot && i < j) j--; // 交换 if (i < j) nums[i++] = nums[j]; // 从左向右找到第一个大于pivot的元素 while (nums[i] <= pivot && i < j) i++; if (i < j) nums[j--] = nums[i]; } nums[i] = pivot; // 判断基准值是否为目标位置 if (i == k) { cout << nums[k] << endl; exit(0); } // 递归排序 if (k < i) quickSort(left, i - 1, k); if (k > i) quickSort(i + 1, right, k);
} int main() { int n, k; cin >> n >> k; for (int i = 0; i < n; i++) { scanf("%d",&nums[i]); } quickSort( 0, n - 1, k); return 0;
}
总结
排序还是非常博大精深的,希望在后续的学习中不断精进!

相关文章:
暑假算法刷题日记 Day 10
目录 重点整理 054、 拼数 题目描述 输入格式 输出格式 输入输出样例 核心思路 代码 055、 求第k小的数 题目描述 输入格式 输出格式 输入输出样例 核心思路 代码 总结 这几天我们主要刷了洛谷上排序算法对应的一些题目,相对来说比较简单 一共是13道…...
【Midjourney】AI作画提示词工程:精细化技巧与高效实践指南
文章目录 💯AI作画提示词基础结构1 图片链接1.1 上传流程 2 文字描述3 后置参数 💯AI作画提示词的文字描述结构1 主体主体细节描述2 环境背景2.1 环境2.2 光线2.3 色彩2.4 氛围 3 视角4 景别构图5 艺术风格6 图片制作方法7 作品质量万能词 💯…...
C语言——文件
文件操作 概念 文件是指存储在外存储器上(一般代指磁盘,也可以是U盘,移动硬盘等)的数据的集合。 文件操作体现在哪几个方面 1.文件内容的读取 2.文件内容的写入 数据的读取和写入可被视为针对文件进行输入和输出的操作…...
视频孪生技术在智慧水利(水务)场景中的典型应用展示
一、智慧水利建设规划 根据水利部编制《“十四五”智慧水利建设规划》,建设数字孪生流域、“2N”水利智能业务应用体系、安全可控水利网络安全防护体系、优化健全水利网信保障体系,建成七大江河数字孪生流域,推进水利工程智能化改造…...
使用kubekey快速搭建k8s集群
项目仓库地址 https://github.com/kubesphere/kubekey/ 支持的Kubernetes Versions https://github.com/kubesphere/kubekey/blob/master/docs/kubernetes-versions.md 安装 选择自己想要下载的版本 https://github.com/kubesphere/kubekey/releases 复制下载链接并下载 示…...
C++——入门基础(上)
目录 一、C参考文档 二、C在工作领域的应用 三、C学习书籍 四、C的第一个程序 五、命名空间 (1)namespace的定义 (2)命名空间的使用 六、C的输入和输出 七、缺省函数 八、函数重载 九、写在最后 一、C参考文档 (1)虽…...
Spring事务失效
类内部访问导致事务不生效原因: 注解Transaction的底层实现是Spring AOP技术,而Spring AOP技术使用的是动态代理。spring事务失效的原因就是动态代理失效的原因: 对于static方法和非public方法,注解Transactional是失效的,因为不…...
Qt QLabel标签制作弹框效果,3s后缓慢自动消失
效果图 初始化说明 void InitStatusTips() {if (NULL statusTips_) {return;}statusTips_->setFixedSize(300, 80);//固定大小statusTips_->move((width() - statusTips_->width()) / 2, height() - 30 - statusTips_->height());//移动位置statusTips_->setA…...
JZ55 二叉树的深度
二叉树的深度_牛客题霸_牛客网 递归代码太简单-一行就可以,可以用二叉树的层序遍历,顺便温习下二叉树层序遍历的写法。 对应leetcode 104题,层序遍历对应leetcode-102自顶向下,leetcode-107自底向上 /* struct TreeNode {int val;struct Tre…...
视频号分销系统搭建教程,源代码+部署上线指南
目录 一、视频号分销是什么? 二、视频号分销系统怎么搭建? 1.系统架构设计 2.部署与上线 3.持续迭代与升级 三、部分代码展示 一、视频号分销是什么? 视频号分销系统是合集了视频号商家的产品,推广达人推广商家的产品可赚取…...
【python】cryptography库学习
【python】cryptography库学习 cryptography学习1-安装2-cryptography学习2.1-fernet的使用2.2-padding填充2.3-Hash2.4-ciphers(对称算法AES为例)2.5-asymmetric(非对称算法RSA为例)函数:generate_private_key类:RSAPrivateKey&a…...
解密!抖音百万粉丝博主三维地图视频都用到了什么GIS数据和技术
引言 在抖音上有许多诸如三维地图科普局、三维地图看世界和三维地图鉴赏等百万粉丝博主靠着三维地图科普城市、景区、人文和地理视频获赞百万,在我们浏览视频时犹如身临其境一般,那么制作这些视频需要什么GIS技术呢?如何利用MapMost技术自己…...
Python知识点:如何使用Kubernetes与Python进行容器编排
Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用的部署、管理和扩展。结合 Python,你可以通过 Kubernetes API 和工具,如 kubectl 和 kubernetes-client 库,来编写和管理容器化应用。以下是如何使用 Kubernetes 和 Pyt…...
Markdown与Word中插入图片的方法及比较
在撰写文档时,无论是技术文档、博客还是学术论文,插入图片都是非常常见的需求。本文将对比两种流行的文本编辑工具——Markdown和Microsoft Word——在插入图片方面的异同点。 Markdown插入图片 如何插入图片 在Markdown中插入图片非常简单࿰…...
Vue3+Vite安装配置tailwindCss
考虑到官网不是很好访问,这里记录一下简单步骤方便小友查阅 1. 安装依赖 npm install -D tailwindcss postcss autoprefixer2. 初始化配置文件 npx tailwindcss init -p3.配置模板路径 /** type {import(tailwindcss).Config} */ export default {content: [&quo…...
大数据学习-Spark基础入门
一、Spark是什么? Stack Overflow的数据可以看出,2015年开始Spark每月的问题提交数量已经超越Hadoop,而2018年Spark Python版本的API PySpark每月的问题提交数量也已超过Hadoop。2019年排名Spark第一,PySpark第二;而十…...
C语言:链表插入
链表的插入分为头插入,中间插入和尾插入。 具体方法如下: #include<stdio.h> #include<stdlib.h>typedef struct node {int s;struct node* pnext; }list;list* addnode(list** pphead, list** ppend, int n) {list* ptemp malloc(sizeof…...
xss 一些例子
目录 XSS 1.Ma Spaghet!编辑 2.Jefff编辑 3.Ugandan Knuckles编辑 4.Ricardo Milos编辑 5.Ah Thats Hawt编辑 6.Ligma编辑 7.Mafia编辑 简单解法就是换一个函数 作者得原意解法 8.Ok, Boomer编辑 XSS 1.Ma Spaghet! 这里接收了一个somebody参数&…...
基于Docker compose部署Confluence 8.3.4及设置数据持久化存储的总结
基于Docker compose部署Confluence 8.3.4及设置数据持久化存储的总结 一、环境信息二、安装部署三、向导 介绍如何基于Docker、Docker Compose的方式安装部署Confluence 8.3.4,并且设置数据的持久化存储。 一、环境信息 操作系统:CentOS 7.9 Docker Ver…...
eNSP 华为交换机生成树协议
华为交换机生成树协议 生成树协议原理与作用 选举一个交换机作为根网桥(生成树的根),计算出到其他所有交换机的最佳路径,把备用路径的端口设为堵塞状态(逻辑上关闭备用路径),当最佳路径故障再…...
2027年非全日制国际商务硕士备考规划-暨南大学(珠海研究院)
2027年非全日制国际商务硕士备考规划 一、基本情况与备考总原则 个人时间画像 工作日:19:20到家,19:30-20:00吃饭休息,20:00-23:00为黄金学习时段(约2.5-3小时)。23:30前入睡,保证7小时睡眠。 周末…...
HARMONYOS应用实例261:分段函数绘制
分段函数绘制 功能:定义分段函数规则,自动绘制不连续的函数图像。 支持创建多个分段函数,每个分段可以是不同类型 支持三种函数类型:一次函数、二次函数、常量函数 可调节每个分段的函数系数(a、b、c) 可设置每个分段的定义域(起点和终点) 可控制端点是否包含(开区间或…...
从‘带不动’到‘跑满帧’:游戏玩家必懂的显示器带宽与接口选择避坑指南
从‘带不动’到‘跑满帧’:游戏玩家必懂的显示器带宽与接口选择避坑指南 刚入手一台2K 170Hz电竞显示器,却发现刷新率死活上不去?画面时不时出现撕裂或闪烁?别急着怀疑显卡性能,问题可能出在那根被你忽视的连接线上。…...
避坑指南:雅特力AT32F403A V2库在Keil5中的常见配置错误及解决方法
雅特力AT32F403A V2库在Keil5中的高频配置问题与实战修复方案 当国产MCU逐渐成为嵌入式开发的新选择,雅特力AT32F403A凭借其出色的性价比获得了不少工程师的青睐。但在实际开发中,特别是在Keil5环境下使用V2库时,不少开发者都会遇到一些看似简…...
OpenHD图传实战:如何为你的树莓派3B天空端配置720P 60帧,实现低延迟流畅回传
OpenHD图传实战:树莓派3B天空端720P 60帧低延迟优化指南 当你已经完成OpenHD图传系统的基础搭建,却发现默认配置下的画面卡顿、延迟明显时,这篇文章将带你深入系统核心,通过精准调参实现从"勉强能用"到"专业级流畅…...
新手入门指南:在快马平台用AI生成代码理解云桌面基础概念
今天想和大家分享一个特别适合新手理解云桌面基础概念的实践方法。作为一个刚接触云计算的小白,我最初对"一台主机创建多个云桌面"这个概念也是一头雾水,直到在InsCode(快马)平台上尝试用AI生成代码来模拟这个过程,才真正搞明白其中…...
AudioLDM-S极速音效生成:5分钟搞定游戏音效,小白也能当音效师
AudioLDM-S极速音效生成:5分钟搞定游戏音效,小白也能当音效师 1. 游戏音效制作的新纪元 想象一下这样的场景:你正在开发一款独立游戏,需要一个"科幻飞船引擎启动"的音效。传统方式可能需要花费数小时搜索音效库、购买…...
终极分屏游戏解决方案:Nucleus Co-Op 让单机游戏变身多人派对
终极分屏游戏解决方案:Nucleus Co-Op 让单机游戏变身多人派对 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为单机游戏无法本地多…...
闪豆视频下载器 v20260329-B站抖音爱优腾多平台批量下载,画质自选速度快
一款面向电脑端打造的多平台视频批量下载工具,支持 B 站、A 站、抖音、爱奇艺、优酷、腾讯视频等主流内容平台,覆盖范围较广,适合经常需要从不同平台保存视频内容的用户使用。 软件操作流程简单直接,解析和下载过程清晰易懂&#…...
企业财务系统集成指南:如何用诺诺开放平台API搞定电子发票全流程(从签约到开票)
企业财务系统集成指南:诺诺开放平台电子发票全流程实战 当财务数字化转型成为企业降本增效的刚需,电子发票作为交易闭环的关键环节,其系统集成质量直接影响业务流畅度。本文将带您全景式拆解从商务对接到技术落地的完整链路,避开那…...
