python 奇数位于偶数前面

剑指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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值