zoukankan      html  css  js  c++  java
  • python活力练习Day27

    题目描述:

    给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。

    对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。

    你可以返回任何满足上述条件的数组作为答案。

    示例:

    输入:[4,2,5,7]
    输出:[4,5,2,7]
    解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。

    提示:

    1. 2 <= A.length <= 20000
    2. A.length % 2 == 0
    3. 0 <= A[i] <= 1000

    解题思路:

    第一种:1.首先将A分为两部分:even列表存储偶数;odd列表存储奇数;

        2.其次设置两个变量遍历(i ,j = 0,1  以步长2进行叠加)列表A,将对应位置值用偶数与奇数列表值进行替代;

        3.最终输出A

    第二种:采用双指针的思想

        优点:未额外创建空间

        1.首先创建两个指针(i, j = 0,1)表示偶数和奇数位置索引

        2.其次遍历列表A,如果对应奇偶位置的值都不一致,那么交换两个位置的值,同时向前 +2;如果偶数对应位置的值一致而奇数位置值不一致,那么将偶数索引(i)向前 + 2;否则 将奇数索引(j)向前 +2。

        3.最终输出A

    python代码:

     1 #方法一:将奇偶数分开
     2 def sortArrayByParityII(A):
     3     # 找出列表的所有偶数
     4     even = [i for i in A if i % 2 == 0]
     5     # 找出所有的奇数
     6     odd = [i for i in A if i % 2 == 1]
     7 
     8     i, j = 0, 1 # 偶数奇数
     9     n = len(A)
    10     while i < n and j <= n:
    11         index = i // 2
    12         A[i] = even[index]
    13         A[j] = odd[index]
    14         i += 2
    15         j += 2
    16 
    17     return A
    18 
    19 #方法二:双指针
    20 def sort(A):
    21 
    22     i, j = 0, 1
    23     while i < len(A) and j <= len(A):
    24         if A[i] % 2 != 0 and A[j] % 2 == 0:
    25             A[i], A[j] = A[j], A[i]
    26             i += 2
    27             j += 2
    28         elif A[j] % 2 != 0:
    29             j += 2
    30         else:
    31             i += 2
    32 
    33     return A
    34 
    35 if __name__ == "__main__":
    36     A = [4,2,2,5,7,3]
    37     print("方法一输出结果:{}".format(sortArrayByParityII(A)))
    38     print("方法二输出结果:{}".format(sort(A)))

    输出结果:

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/sort-array-by-parity-ii

  • 相关阅读:
    约瑟夫环公式解
    闭区间筛素数个数
    欧拉函数
    负进制转换
    2018黑龙江省赛总结
    基础博弈——威佐夫与尼姆不得不说的那些事
    极角排序
    int型素数拆分
    快速幂与费马小定理与组合数
    A*搜索算法
  • 原文地址:https://www.cnblogs.com/xiaodangdang/p/13214797.html
Copyright © 2011-2022 走看看