剑指offer第21题:将奇数位于偶数前面
输入一个列表,调整顺序为所有奇数位于偶数前面
# _*_encoding:utf-8 _*_
class Solution:
def reorder(self, lst):
"""
把奇数放在偶数前面
"""
length = len(lst)
if not length:
return False
# ------------------------------------------------------------
# 方法一:
lst.sort(reverse=True ,key=lambda x: x&1)
return lst
# ------------------------------------------------------------
# ------------------------------------------------------------
# 方法二:
# p_begin = 0
# p_end = 0
# while p_end < length:
# """
# p_end与p_begin都从前面开始
# lst在0到p_begin(不包括p_begin)之间为奇数
# lst在p_begin到p_end之间都为偶数
# """
# if lst[p_end] & 1:
# if p_end != p_begin:
# lst[p_end], lst[p_begin] = lst[p_begin], lst[p_end]
# p_begin += 1
# p_end += 1
# return lst
# ------------------------------------------------------------
# ------------------------------------------------------------
# 方法三(参考剑指offer方法):
# p_begin = 0
# p_end = length-1
# while p_end >= p_begin:
# """
# p_end指向最后一个奇数
# p_begin指向第一个偶数
# """
# while p_end >= p_begin and not lst[p_end] & 1:
# p_end -= 1
# while p_end >= p_begin and lst[p_begin] & 1 :
# p_begin += 1
# if p_end >= p_begin:
# lst[p_end], lst[p_begin] = lst[p_begin], lst[p_end]
# return lst
# ------------------------------------------------------------
# 测试用例
if __name__ == '__main__':
solution = Solution()
lst = [[],[1],[1,3,5,7,9,8,6,4,2],[2,4,6,8,9,7,5,3,1],[1,2,3,5,4,6,7,3,5,6]]
for lst1 in lst:
print solution.reorder(lst1)