【Python训练营】Python每日一练----第35天:双向排序

简介: 【Python训练营】Python每日一练----第35天:双向排序

网络异常,图片无法展示
|

📢📢📢📣📣📣 🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜 🏅🏅🏅Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++) 💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀 💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺 🍉🍉🍉“一万次悲伤,依然会有Dream

题目描述

网络异常,图片无法展示
|
输入输出样例 示例 输入

3 3
0 3
1 2
0 2

输出

3 1 2

样例说明 原数列为 (1, 2, 3)。

第 11 步后为 (3, 2, 1)。

第 22 步后为 (3, 1, 2)。

第 33 步后为 (3, 1, 2)。与第 2 步操作后相同,因为前两个数已经是降序了。

解题思路

  • 首先题目中说的是要么将a1到aqi降序排列,要么将aqi到an升序排列,其中特别要注意一点,aqi在两次的排序中都会出现,这个我们要提前搞明白,不然最后总是出不来正确结果,比如我!!!一直出错,最后才发现,aqi两次排序都包含其中,真的是头大。
  • 我们可以创建三个列表,其中list1用来存储我们输入的操作类型,即是升序还是降序,这个地方我们后续使用if else语句来判断;list2用来存储我们输入的参数,即对几个数进行操作;list3作为我们的目标列表,开始时需要先将其中的元素表示出来list3 = [i for i in range(1,length+1)]
  • 当降序时:list3 = sorted(list3[0:list2[i-1]],reverse=True) + list3[list2[i-1]:]
  • 当升序时:list3 = list3[:list2[i-1]-1]+sorted(list3[list2[i-1]-1:]),此时千万别忘了,此时的界限是list2[i-1]-1,因为还是之前说的aqi在两次排序中都会出现,因为我们是根据降序来写升序的,所以在求升序时,需要额外将aqi加进去,就需要-1

最后的最后,当我们提交时他居然超时啦,啊啊啊我直接哭死啦!我是真的没办法~希望大家如果有优化方法的话,可以指导一下我,实在是搞不太懂这些东西,头都大啦。

源码分享

import os
import sys
# 请在此输入您的代码
length,num = map(int, input().split())
list1 = []
list2 = []
for i in range(num):
  a,b = map(int, input().split())
  list1.append(a)
  list2.append(b)
list3 = [i for i in range(1,length+1)]
for i in range(1, num+1):
  if list1[i-1] == 0:
    list3 = sorted(list3[0:list2[i-1]],reverse=True) + list3[list2[i-1]:]
  else :
    list3 = list3[:list2[i-1]-1]+sorted(list3[list2[i-1]-1:])
for i in list3:
  print(i,end=' ')

学习总结

🏅今天是我在Python训练营的第 35 天,希望每天都能见到最棒的你🏅

🌟 The best time to plant a tree is ten years ago, followed by now! 🌟

🌲🌲🌲 最后,作者很感谢能够阅读到这里的读者。如果看完觉得好的话,还请轻轻点一下赞或者分享给更多的人,你们的鼓励就是作者继续行文的动力。 ❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了,我们下期再见~

网络异常,图片无法展示
|
网络异常,图片无法展示
|

目录
相关文章
|
3天前
|
Python
Python中几种lambda排序方法
【9月更文挑战第7天】在Python中,`lambda`表达式常用于配合排序函数,实现灵活的数据排序。对于基本列表,可以直接使用`sorted()`进行升序或降序排序;处理复杂对象如字典列表时,通过`lambda`指定键值进行排序;同样地,`lambda`也适用于根据元组的不同位置元素来进行排序。
|
11天前
|
Python
Python魔法:用一行代码实现数据排序
【8月更文挑战第31天】忘掉传统多行排序代码,本文揭秘如何使用一行Python代码快速对数据进行排序,同时深入探讨背后的原理和性能考量。
|
1月前
|
Python
【Python】对字典进行排序
该文档介绍了如何在Python中对字典进行排序的方法。
16 2
|
2月前
|
Python
Python小技巧:一种字符串的排序方式
Python小技巧:一种字符串的排序方式
18 0
|
2月前
|
分布式计算 并行计算 算法
探索排序的宇宙奥秘:Python中归并排序的并行处理与分布式应用!
【7月更文挑战第11天】归并排序是一种分治算法,适用于并行和分布式处理。在Python中,利用`concurrent.futures`可实现并行归并排序,但因GIL限制,可能需借助`multiprocessing`或GPU库。分布式归并排序则通过分布式框架如Apache Spark处理大规模数据,每个节点独立排序后进行网络合并。并行与分布式技术提升了处理大数据的速度和效率。**
33 9
|
2月前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
【7月更文挑战第12天】Python的快速排序**以分治策略实现高效排序,平均时间复杂度$O(nlogn)$,优于$O(n^2)$的冒泡排序。基本实现通过选取基准元素分割数组,然后递归排序两部分。优化版使用随机基准避免最坏情况。对比显示优化后排序更稳定,适应不同数据集,提升程序性能。
44 4
|
2月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
【7月更文挑战第12天】归并排序是高效稳定的排序算法,采用分治策略。Python 实现包括递归地分割数组及合并已排序部分。示例代码展示了如何将 `[12, 11, 13, 5, 6]` 分割并归并成有序数组 `[5, 6, 11, 12, 13]`。虽然 $O(n log n)$ 时间复杂度优秀,但需额外空间,适合大规模数据排序。对于小规模数据,可考虑其他算法。**
64 4
|
1月前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
42 0
|
1月前
|
Python
【Python】对key或values是datetime类型或时间字符串的字典dict排序
本文提供了针对字典中key为时间字符串或datetime类型时进行排序的解决方案,包括将时间字符串转换为datetime对象排序和直接对datetime类型的key排序的方法。
31 0
|
2月前
|
搜索推荐 算法 大数据
Python排序大法揭秘!归并排序:如何优雅地合并两个世界?
【7月更文挑战第11天】归并排序是Python中一种高效优雅的排序算法,基于分而治之的思想,将数组拆分成小部分,分别排序后再合并。Python实现归并排序的关键在于递归地分割和有序合并数组。其稳定性和O(n log n)的时间复杂度使其在大数据处理中表现出色。通过学习归并排序,我们可以深化对编程思维的理解并提升解决问题的能力。
39 1