zoukankan      html  css  js  c++  java
  • 143. 排颜色 II

    143. 排颜色 II

    中文English

    给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序。

    样例

    样例1

    输入: 
    [3,2,2,1,4] 
    4
    输出: 
    [1,2,2,3,4]
    

    样例2

    输入: 
    [2,1,1,2,2] 
    2
    输出: 
    [1,1,2,2,2]
    

    挑战

    一个相当直接的解决方案是使用计数排序扫描2遍的算法。这样你会花费O(k)的额外空间。你否能在不使用额外空间的情况下完成?

    注意事项

    1. 不能使用代码库中的排序函数来解决这个问题
    2. k <= n
    输入测试数据 (每行一个参数)如何理解测试数据?

     背向型双指针(三指针) +  不停划分区间排序(循环k,小的放置左边,大的放置右边,往右边走,缩小区间)

    class Solution:
        """
        @param colors: A list of integer
        @param k: An integer
        @return: nothing
        """
        def sortColors2(self, colors, k):
            # write your code here
            #一层一层往下划分,小于k的放置左边,大于k的放置右边,left会随着k更新
            #背向型双指针
            
            length = len(colors)
            #left只需要重置第一次即可,后面的会更新,一直不停的缩小区间,来进行划分数组,往右边走
            left = 0
            index = 0
            
            #最外层
            for i in range(1, k + 1):
           #right每次需要重置,left不需要,left和index为起点指向,index正常走,left记录小于i的个数,缩小区间. right
    = length - 1 #里面不停的进行划分 while index <= right: #放置左边 if (colors[index] < i): colors[index], colors[left] = colors[left], colors[index] index += 1 left += 1 elif (colors[index] > i): colors[index], colors[right] = colors[right], colors[index] right -= 1 else: index += 1 #此时已经划分完毕当前i的,如果是小于i的左边,大于i的右边,只需要关心大于i的部分即可,更新index index = left return colors
  • 相关阅读:
    React 高阶组件
    React Context(执行上下文)
    解决背景图片半透明(rgba)兼容性
    js基础复习---数组操作
    js基础复习---字符串操作
    escape()、encodeURI()、encodeURIComponent()区别详解(转)
    form data和request payload的区别(转)
    关于把时间搓转化为时间
    关于js 获取本地当前时间问题
    关于html 头部meta标签。
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13199948.html
Copyright © 2011-2022 走看看