美文网首页
tag12:排序 归并排序和非递增最小子序列

tag12:排序 归并排序和非递增最小子序列

作者: 是黄小胖呀 | 来源:发表于2021-01-09 17:46 被阅读0次

leetcode1403. 非递增顺序的最小子序列

给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。

如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。

与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。

注意,题目数据保证满足所有约束条件的解决方案是 唯一 的。同时,返回的答案应当按 非递增顺序 排列。

示例 1:

输入:nums = [4,3,10,9,8]

输出:[10,9]

解释:子序列 [10,9] 和 [10,8] 是最小的、满足元素之和大于其他各元素之和的子序列。但是 [10,9] 的元素之和最大。 

来源:力扣(LeetCode)

解题思路关键点:先排序,然后从后到前截取 

注意点:(1)for循环的遍历,倒序要到-1值(2)for循环内部的判断条件是:SR<=SL,都要继续

代码如下:

class Solution:

    def minSubsequence(self, nums: List[int]) -> List[int]:

        nums.sort()

        sum1=sum(nums)

        k=len(nums)

        tmp=0

        sr=0

        sl=0

        res=[]

        for i in range(k-1,-1,-1):

                sr=sr+nums[i]

                sl=sum1-sr

                res.append(nums[i])

                if sr<=sl:

                    continue

                else:

                    break

        return res

leetcode:面试题 10.01. 合并排序的数组

给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。

初始化 A 和 B 的元素数量分别为 m 和 n。

示例:

输入:

A = [1,2,3,0,0,0], m = 3

B = [2,5,6],      n = 3

输出: [1,2,2,3,5,6]

说明:

A.length == n + m

解题思路关键是:

两路有序数组的归并

代码如下:

class Solution:

    def merge(self, A: List[int], m: int, B: List[int], n: int) -> None:

        """

        Do not return anything, modify A in-place instead.

        """

        i=0

        j=0

        res=[]

        k1=len(A)

        k2=len(B)

        k=k1-k2

        while  i<k and  j<k2:

            if A[i]<B[j]:

               res.append(A[i])

               i=i+1

            elif A[i]>B[j]:

               res.append(B[j])

               j=j+1

            else:

               res.append(A[i])

               res.append(B[j])

               i=i+1

               j=j+1

        if i<k:

            for p  in range(i,k):

                res.append(A[p])

        if j<k2:

            for p in range(j,k2):

                res.append(B[p]) 

        for k in range(k1):

            A[k]=res[k]

        return 

相关文章

  • tag12:排序 归并排序和非递增最小子序列

    leetcode1403. 非递增顺序的最小子序列[https://leetcode-cn.com/problem...

  • 【算法】归并排序及其应用

    一、归并排序 归并排序的思路 归并排序是典型的分治算法,把一个数组的排序,分为两个子序列的排序,然后将两个有序序列...

  • iOS算法总结-归并排序

    归并排序算法: 归并排序(Merging Sort) 就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有...

  • 数据结构与算法 08: 归并排序

    归并排序算法: 归并排序(Merging Sort) 就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有...

  • 归并排序

    归并排序的思想是分治:要对1...n的元素排序,先分别对的元素和的元素排序,再归并排好序的两个子序列。归并排序的复...

  • iOS:归并排序

    归并排序算法 归并排序(Merging Sort) 就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有n...

  • Swift 3.0 归并排序

    归并排序: 将序列每相邻两个数字进行归并操作,形成 floor ( n/2) 个序列,排序后每个序列包含两个元素 ...

  • 归并排序&快速排序

    归并排序 利用归并的思想实现排序方法,该算法采用经典的分治策略,分而治之。 代码实现 基础设置 归并排序 —— 非...

  • 《算法 第四版》算法6--归并排序

    归并排序 -自然语言描述: 指的是将两个已经排序的序列合并成一个序列的操作。 归并过程为:比较a[i]和a[j]的...

  • 归并排序——MergeSort

    归并排序 归并排序算法的运作如下: 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指...

网友评论

      本文标题:tag12:排序 归并排序和非递增最小子序列

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