当前位置: 首页 > news >正文

python每日一题练习

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

    必须在不使用库内置的 sort 函数的情况下解决这个问题。

    里面的要求1是要进行原地排序 2是不使用库内置的sort函数

    有很多的排序方法 就比如我们可以使用冒泡排序啊 最简单的

    1.

    class Solution(object):def sortColors(self, nums):n = len(nums)for i in range(n - 1):swapped = Falsefor j in range(n - 1 - i):if nums[j] > nums[j + 1]:nums[j], nums[j + 1] = nums[j + 1], nums[j]swapped = Trueif not swapped:  # 无交换则已有序breakreturn nums
    solution=Solution()
    result=solution.sortColors([2,0,2,1,1,0])
    print(result)

    就这样就行了

    但是肯定不是这么简单 我们来开阔一下新思路 既然是只有三个元素 0 1 2 那么是不是可以统计0 1 2 的数目 然后就前几个是0 中间几个是1 后面几个是2 

    2.

    class Solution(object):def sortColors(self, nums):n = len(nums)if n==0 or n==1:return numscount1=count2=count3=0for i in range(n):if nums[i]==0:count1+=1elif nums[i]==1:count2+=1else:count3+=1nums[:] = [0] * count1 + [1] * count2 + [2] * count3return nums
    solution=Solution()
    result=solution.sortColors([0])
    print(result)

    这个思路很不错 但是不是我想的 是我看评论区里面的大佬想的思路 我觉得很灵活很牛了 所以给它记录下来

    然后还有什么方法呢?

    是不是可以使用双指针 已经一共才三个情况 0到Left就是0 left到right就是1 right到末尾就是2 还有这样的思路 

    class Solution(object):def sortColors(self, nums):n = len(nums)if n==0 or n==1:return numsleft=0right=n-1i=0while i <= right:if nums[i]==0:temp=nums[i]nums[i]=nums[left]nums[left]=templeft+=1i+=1elif nums[i]==2:nums[i]=nums[right]nums[right] = 2right-=1else:i+=1return nums
    solution=Solution()
    result=solution.sortColors([0,1,1,2,2,1])
    print(result)

    这个代码的思路就是双指针 遍历整个数组 如果是0 那么这个地方的值就要和left的位置的值进行互换 如果是2 那就需要和right处的元素进行互换 这样的话就会使得最后1就是在中间的 0 2各在两边 

    这道题还蛮有意思的 希望大家可以跟我一起 学会这些思路~

    http://www.lryc.cn/news/602767.html

    相关文章:

  • Java集合遍历的几种方式
  • 【docker】DM8达梦数据库的docker-compose以及一些启动踩坑
  • Thymeleaf th:object核心用法精解
  • LeetCode|Day28|67. 二进制求和|Python刷题笔记
  • OpenLayers 入门指南【四】:项目初始化
  • org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path
  • 下载k8s官方组件chart和容器镜像
  • 自动化测试常用函数
  • 网络编程概述与UDP编程
  • 关于前端的性能优化
  • 【数据架构09】人工智能及数据智能架构篇
  • pg数据库,本地服务器下不同端口迁移
  • 用了Flutter包体积增大就弃用Flutter吗?包体积与开发效率,这两者之间如何权衡?
  • 微信小程序点击输入框时,顶部导航栏被遮挡问题如何解决?
  • 鸿蒙打包签名
  • Linux驱动23 --- RkMedia 使用
  • gdb 基本命令
  • 3DGRUT: 革命性的3D高斯粒子光线追踪与混合光栅化技术深度解析
  • Error: Unable to find a match: python3.8
  • 【Linux操作系统】简学深悟启示录:Linux环境基础开发工具使用
  • Spring IOC与DI
  • 【服务器知识】nginx配置ipv6支持
  • JVM 内存共享区域详解
  • RabbitMQ概念与管理端配置说明
  • 学习游戏制作记录(改进剑投掷状态)7.28
  • 四、计算机组成原理——第7章:输入/输出系统
  • Unity_UI_NGUI_组合控件2
  • 数论1.01
  • socketpair函数详解
  • MCU+RTOS调试