Leetcode 075 颜色分类 Python 最简单解法
2018-10-17 21:47
393 查看
题目:
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意:
不能使用代码库中的排序函数来解决这道题。
示例:
输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
进阶:
一个直观的解决方案是使用计数排序的两趟扫描算法。
首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。
你能想出一个仅使用常数空间的一趟扫描算法吗?
解法一关键点:
1._0, _1, _2 分别指向已经排好序的最后一个0,1,2的位置。
2.开始状态 _0, _1, _2 会相同,相同的时候0的优先级最高,其次是1,最后是2,高优先级会通过所有if 判断,会覆盖之前的赋值。
解法一:
class Solution(object): def sortColors(self, nums): _0, _1, _2 = -1, -1, -1 for num in nums: if num <= 2: _2 += 1 nums[_2] = 2 if num <= 1: _1 += 1 nums[_1] = 1 if num == 0: _0 += 1 nums[_0] = 0 """
解法二
class Solution(object): def sortColors(self, nums): zero_end = -1 two_beg = len(nums) i = 0 while i < two_beg: if nums[i] == 0 and i != zero_end+1: zero_end += 1 nums[i] , nums[zero_end] = nums[zero_end], 0 elif nums[i] == 2 and i != two_beg-1: two_beg -= 1 nums[i], nums[two_beg] = nums[two_beg], 2 else: i += 1阅读更多
相关文章推荐
- Leetcode 075 颜色分类 Python C++ 史上最详细题解系列(多解法)
- leetcode-颜色分类
- 【LeetCode-面试算法经典-Java实现】【075-Sort Colors (颜色排序)】
- [LeetCode] Gas Station,转化为求最大序列的解法,和更简单简单的Jump解法。
- python简单题《单独的数字》解法
- Leetcode Permutations II 最简单的解法
- leetcode 题型 数据结构 解法 分类总结
- LeetCode:1. Two Sum解法(C,C++,Jave,Python)
- Leetcode 206. Reverse Linked List 链表翻转 Python 两种解法
- [LeetCode]11. Container With Most Water解法及python
- [LeetCode] 82. Remove Duplicates from Sorted List II 从分类列表中删除重复项目 II @python
- LeetCode Longest Substring Without Repeating Characters简单高效解法
- LeetCode 139. Word Break 动态规划DP Python解法
- LeetCode 068 文本左右对齐(Text Justification) Python 解法
- LeetCode Rotate List简单易懂解法
- leetcode的python实现 刷题笔记35:搜索插入位置的暴力解法和优化解法
- Python 爬虫学习:爬取LeetCode的题目并且按照难度分类
- Python学习:对MySQL实现简单的无限极分类操作
- LeetCode 322. Coin Change Python 动态规划/BFS解法
- Leetcode第303 Range Sum Query - Immutable(简单动态规划解法)