本文共 1210 字,大约阅读时间需要 4 分钟。
这里一定可以交换,如果没有,那就 i = j 退出循环了
class Solution: def exchange(self, nums): i, j = 0, len(nums) - 1 while i < j: # 当搜索到偶数时 跳出循环,此时的i是 该偶数的 下标 while i < j and nums[i] & 1 == 1: i += 1 # 当搜索到奇数时 跳出循环,此时的j是 该奇数的 下标 while i < j and nums[j] & 1 == 0: j -= 1 # 交换两个值 nums[i], nums[j] = nums[j], nums[i] return nums'''作者:jyd链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/solution/mian-shi-ti-21-diao-zheng-shu-zu-shun-xu-shi-qi-4/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。'''
注:x&1 位运算 等价于 x%2 取余运算,即皆可用于判断数字奇偶性。
创建双端队列 deque,遍历数组,奇数前插入,偶数后插入
class Solution: def exchange(self, nums): odd = collections.deque() l = len(nums) for i in range(l): if nums[l-i-1] % 2 != 0: # l-i-1 从后到前 odd.appendleft(nums[-i-1]) if nums[i] % 2 == 0: # i 从前到后 odd.append(nums[i]) return list(odd)