美文网首页
刷题-排序4

刷题-排序4

作者: 喵姬Amy | 来源:发表于2019-03-26 13:56 被阅读0次

题目:

给定一个非负整数数组 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] 也会被接受。

提示:

2 <= A.length <= 20000

A.length % 2 == 0

0 <= A[i] <= 1000

方法1:

思路:选择排序的变形。

定义 i=0 ,j=1;每次循环都加上2

A[i] 是求偶数

A[j]是奇数

代码如下:

class Solution(object):

    def sortArrayByParityII(self, A):

        """

        :type A: List[int]

        :rtype: List[int]

        """

        i = 0

        j = 1

        while i < len(A) and j < len(A):

            if A[i] % 2 == 0:

                i += 2

            else:

                A[i],A[j] = A[j],A[i]

                j += 2

        return A

if __name__ == '__main__':

    res = Solution()

    rt = res.sortArrayByParityII([4,2,5,7])

    print(rt)

方法2:

定义两个空列表

一个放偶数,一个放奇数

然后重新调整A列表。2i放偶数,2i+1放奇数

代码如下:

class Solution(object):

    def sortArrayByParityII(self, A):

        """

        :type A: List[int]

        :rtype: List[int]

        """

        B = []

        C = []

        for i in A:

            if i % 2 == 0:

                B.append(i)

            if i % 2 != 0:

                C.append(i)

        for i in range(len(B)):

            A[i*2] = B[i]

            A[i*2+1] = C[i]

        return A

if __name__ == '__main__':

    res = Solution()

    rt = res.sortArrayByParityII([4,2,5,7])

    print(rt)

方法三:以内存换时间

思路:

用两个列表推导式,一个放偶数,一个放奇数

定义一个空列表

代码如下:

class Solution:

    def sortArrayByParityII(self, A: List[int]) -> List[int]:

        B = [i for i in A if i % 2 != 0]

        C = [i for i in A if i % 2 == 0]

        D = []

        for B,C in zip(B,C):

            D.append(C)

            D.append(B)

        return D

if __name__ == '__main__':

    res = Solution()

    rt = res.sortArrayByParityII([4,2,5,7])

    print(rt)

用到的知识点:选择排序,列表推导式,zip()函数,

相关文章

  • 刷题-排序4

    题目: 给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。 对数组进行排序,以便当 A[i] 为奇...

  • Python小白 Leetcode刷题历程 No.81-No.

    Python小白 Leetcode刷题历程 No.81-No.85 搜索旋转排序数组Ⅱ、删除排序链表中...

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

  • LeetCode刷题之排序

    1528. 重新排列字符串 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。请你重新排列字符串...

  • leetcode刷题-排序算法

  • 2020-2-16 刷题记录

    0X00 leetcode 刷题 7 道 搜索旋转排序数组(33) 搜索旋转排序数组 II(81) 寻找旋转排序数...

  • [leetcode刷题笔记]拓扑排序

    拓扑排序的基本思路:1.求个顶点入度,入度为0入栈;2.栈不为空,出栈访问,并且该顶点的所有邻接点入度-1,若入度...

  • 刷题1-排序1

    题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。 1.s="anagra...

  • 刷题2-排序2

    题目 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], n...

  • 刷题3-排序3

    给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2...

网友评论

      本文标题:刷题-排序4

      本文链接:https://www.haomeiwen.com/subject/nkugvqtx.html