暑假算法刷题日记 Day 10

news2024/9/21 2:32:42

目录

重点整理

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;  
}

总结

排序还是非常博大精深的,希望在后续的学习中不断精进!

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

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

相关文章

数据埋点系列 18| 数据驱动产品开发:用洞察力塑造卓越产品

在当今竞争激烈的市场中&#xff0c;数据驱动的产品开发已成为创造成功产品的关键。通过利用数据洞察&#xff0c;公司可以更准确地了解用户需求&#xff0c;做出更明智的产品决策&#xff0c;并持续优化产品性能。本文将探讨如何在产品开发的各个阶段应用数据驱动方法。 目录…

python发邮件

1. SMTP&#xff08;简单邮件传输协议&#xff09;基础 SMTP 协议概述 SMTP&#xff08;Simple Mail Transfer Protocol&#xff0c;简单邮件传输协议&#xff09;是用于在计算机网络上传输电子邮件的标准通信协议。它定义了发送邮件的基本规则和流程&#xff0c;确保邮件从发…

开源前端埋点监控插件Web-Tracing

Web-Tracing是一款专为前端项目设计的前端监控插件&#xff0c;它基于JavaScript设计&#xff0c;兼容跨平台使用&#xff0c;并提供了全方位的监控功能。 开源地址&#xff1a;https://gitee.com/junluoyu/web-tracing-analysis 以下是关于Web-Tracing的详细介绍&#xff1a;…

李沐:创业一年,人间三年

大家好&#xff0c;我是 Bob! &#x1f60a; 一个想和大家慢慢变富的 AI 程序员&#x1f4b8; 分享 AI 前沿技术、项目经验、面试技巧! 欢迎关注我&#xff0c;一起探索&#xff0c;一起破圈&#xff01;&#x1f4aa; 李沐&#xff1a;创业一年&#xff0c;人间三年 前不久&am…

【项目】Java文档搜索引擎测试报告

一、项目背景 随着Java技术的不断发展和广泛应用&#xff0c;Java开发者对于API文档的需求日益增加。高质量的API文档不仅能帮助开发者快速了解和掌握各种类、接口、方法等的功能与用法&#xff0c;还能显著提升开发效率。然而&#xff0c;在面对庞大的API文档集时&#xff0c…

爱心公益,向阳而生 ——共同家园 “向阳计划“温暖启航

“向阳计划”由大湾区共同家园线上运营建设共同家园社区公益团队。在这个快节奏的时代,总有一份温暖,能穿透喧嚣,照亮人心。今天,共同家园社区我们满怀激动与期待,正式推出“向阳计划”——一项旨在汇聚社会各界爱心力量,共同为需要帮助的人群送去光明与希望的公益行动。我们共…

鸿蒙 点击获取电话号拨打电话 @ohos.telephony.call (拨打电话)

1, 先看看效果 2, 直接CV 代码 import call from ohos.telephony.callEntry Component struct Index {Statephoto: string 15517189270build() {Column() {Row() {Text(this.photo)Image($r(app.media.ic_contacts_incoming_filled)).width(30).height(30).fillColor(Color.Or…

Ajax笔记总结:第二天(Ajax完结)

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; ajax知识总结&#xff1a; Ajax的基本语法&#xff1a; 1.定义一个实例化对象&#xff1a;new XMLHttpRequest() 2.调用open方法填写请求方式和请求地址 3.调用send方法发送请求 4.监听请求状态 5.4代…

05 serv00安装typecho

下载 ‍ cd domain/xxx.serv00.net/# 下载typecho git clone https://github.com/typecho/typecho.git# 当前有两个目录 typecho/ 和 public_html/ ls# 替换html rm -rf public_html/ mv typecho public_html‍ 安装 浏览器访问你的网站 xxx.serv0.net&#xff0c;看见 type…

informer中的WorkQueue机制的实现分析与源码解读(3)之限速队列RateLimitingQueue

概述 前面2篇文章介绍了workqueue中的普通队列FIFO和延时队列。接下来我们分析workqueue中的第三种队列: 限速队列 client-go 的 util/workqueue 包里主要有三个队列&#xff0c;分别是普通队列Queue&#xff0c;延时队列DelayingQueue&#xff0c;限速队列RateLimitingQueue…

IDEA:如何在idea中设置自动导包

这里使用的是idea2020版本,但是不同版本操作不会有较大的差别. 在Editer中展开General之后,选中Auto Import,最后勾选中Add unambiguous imports on the fly.

pygame开发课程系列(7):打砖块,飞行射击,跳跃游戏实例开发

第七章 实践项目 在本章中&#xff0c;我们将通过三个实践项目来巩固和应用前面章节中学到的知识。这些项目涵盖了经典打砖块游戏、飞行射击游戏和简单的平台游戏&#xff0c;它们将帮助你更好地理解 Pygame 的使用&#xff0c;并为你开发自己的游戏提供灵感和实践经验。 7.1…

Java毕业论文 【二手书电子商城网站】源码见github (原创项目,从0-1自己实现)

文章目录 项目背景主要功能模块分布模块分布具体部分功能 系统架构功能演示买家部分界面&#xff1a;卖家部分界面【8002模块】&#xff1a;管理员部分界面&#xff1a; 项目github地址 项目背景 主要面向高校学生&#xff0c;将高年级同学的书回收到低年级学生的手上&#xf…

EmguCV学习笔记 C# 5.2 仿射变换

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)

教程简介 EasySQLite是一个七天.NET 8操作SQLite入门到实战详细教程&#xff0c;主要是对学校班级&#xff0c;学生信息进行管理维护&#xff08;包含选型、开发、发布、部署&#xff09;&#xff01; 什么是SQLite&#xff1f; SQLite 是一个软件库&#xff0c;实现了自给自…

【蓝牙协议栈】【BLE】精讲引用(包含)服务(Included service)

1.欢迎大家关注和订阅匠心之作&#xff0c;【精讲蓝牙协议栈】、【精讲BLE协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待&#xff01; 2. 精讲蓝牙协议栈&#xff08;Bluetooth Stack&#xff09;&#xff1a;SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OP…

【安全靶场】-DC-8

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 目标&#xff1a;192.168.216.150 一、收集信息 1.端口扫描 nmap -T4 -A 192.168.216.150 -p- 看到80端…

【comfyui 】comfyui mac配置教程

comfyui mac配置教程 1. 安装工程依赖与环境配置2. 安装Comfyui3. Comfyui模型下载与运行 1. 安装工程依赖与环境配置 首先&#xff0c;我们找到Mac电脑的终端并打开&#xff0c;我们复制下列代码并粘贴到终端&#xff0c;然后回车&#xff0c;即可开始安装Xcode工具。 xcode…

C++(week17): C++提高:(七)workflow

文章目录 一、Http协议二、Nginx1.概念2.nginx的安装和部署(1)安装nginx(2)使用nginx服务器部署静态资源 3.HTTP服务器架构(1)基于进程、基于线程&#xff1a;APache(2)事件驱动模型&#xff1a;Nginx(3)反向代理(4)负载均衡 三、workflow异步事件引擎 (异步回调模型)1.服务器底…

day26-测试之接口测试postma的请求前置脚本、关联、测试报告

目录 一、请求前置脚本 1.1.概念 1.2.步骤 1.3.代码 1.4.工作原理 二、关联 2.1.应用场景 2.2.实现步骤 2.3.代码 三、测试报告 3.1.安装newman 3.2.命令说明 一、请求前置脚本 1.1.概念 1).书写在”pre-request”标签中 2).postman在http请求发送之前&#xff0c;会自动执行…