leetcode 376. 摆动序列 python

WIN下使用visual studio 2022安装GMSSL命令行工具 2.1 使用管理员权限打开visual studio(非常重要,否则最后一步 nmake install会失败)右键vs2022,以管理员身份运行即可。2.4 配置环境变量,gmssl可执行程序默认会被安装到如下目录。将如下路径添加到系统环境变量即可。添加后的环境变量如下。2.编译解压后的gmssl源码,编译过程主要参考install.md中的内容,README.md中的步骤不完整。2.2 打开vs2022的命令终端,右键文件,选择在终端中打开。1.下载gmssl源码,解压到相应目录。 阅读详情

题目描述:

 

题解:

1.如果输入nums只有一个元素返回1,如果nums有两个元素,如果两个数字不等则返回2,否则返回1.

2.计算nums数组中相邻数字的差,保存在gaps数组。最终摇摆序列的长度=max(第一个差值为正数的序列最长长度,第一个差值为负数的序列最长长度)+1,分别用p_len n_len记录第一个差值为正数和负数的序列长度,p_start,n_start分别记录差值为正数和负数的开始位置。

3.分别从p_start依次寻找差值为负,正,负....记录长度,n_start做相同操作。

class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return len(nums)
        if len(nums) == 2:
            if nums[0] != nums[1]:
                return 2
            else:
                return 1
        gaps = []
        n = len(nums)
        for i in range(n - 1):
            gaps.append(nums[i + 1] - nums[i])
        p_len = 0
        n_len = 0
        p_start = 0
        n_start = 0
        find_p = 0
        find_n = 0
        for i in range(n - 1):
            if gaps[i] > 0:
                p_start = i
                p_len = 1
                find_p = 1
                break
        for i in range(n - 1):
            if gaps[i] < 0:
                n_start = i
                n_len = 1
                find_n = 1
                break
        p_flag = -1
        for i in range(p_start + 1, n - 1):
            if gaps[i] * p_flag > 0:
                p_len = p_len + 1
                p_flag = -p_flag
        n_flag = 1
        for i in range(n_start + 1, n - 1):
            if gaps[i] * n_flag > 0:
                n_len = n_len + 1
                n_flag = -n_flag
        return max(p_len, n_len) + 1

 

 

Python编程:实现摆动排序算法(完整源码) 摆动排序(Wiggle Sort)是一种在数组中重新排序使得相邻元素不同的算法。具体来说,对于任意一个满足条件的数组,如果奇数位置的元素小于等于它的相邻元素,或者偶数位置的元素大于等于它的相邻元素,那么这个数组就是“摆动”的。然后我们遍历数组中的每个奇数位置,并将当前位置的元素和其相邻的元素交换。例如,可以在游戏中使用该算法来生成随机的弹球运动路径,或在股票交易中使用该算法来预测未来的趋势。可以看出,我们的wiggle_sort函数成功实现了摆动排序算法,并得到了正确的结果。 阅读详情

相关推荐

摆动排序(Wiggle Sort)算法Python实现

摆动排序算法的时间复杂度为O(nlogn),其中n为数组的长度。这是由于排序操作的时间复杂度为O(nlogn),而交换操作的时间复杂度为O(n)。摆动排序算法是一种用于排序数组的特殊方法,通过交换数组元素的位置,使得相邻元素满足特定的大小关系。排序后,我们从索引为2的位置开始,每隔一个元素进行交换。具体而言,我们将索引为i的元素与索引为i-1的元素进行交换,以满足摆动排序的条件。首先,我们对输入的数组进行排序,这可以通过Python内置的。,经过摆动排序后,得到的排序结果为。在上面的示例中,输入数组为。

HackQuestR的博客 245

摆动序列Python解法

相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。输入:nums = [1,17,5,10,13,15,10,5,16,8]...

皮_客的博客 623

Python:实现wiggle sort摆动排序算法(附完整源码)

Python:实现wiggle sort摆动排序算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 600

蓝桥杯 算法训练 摆动序列Python实现(动态规划)详解

资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述   如果一个序列满足下面的性质,我们就将它称为摆动序列:   1. 序列中的所有数都是不大于k的正整数;   2. 序列中至少有两个数。   3. 序列中的数两两不相等;   4. 如果第i – 1个数比第i – 2个数大,则第i个数比第i – 2个数小;如果第i – 1个数比第i – 2个数小,则第i个数比第i – 2个数大。...

bianxia123456的博客 1795

python 实现wiggle sort摆动排序算法

Wiggle Sort摆动排序算法是一种可以将数组重新排列成摆动序列的排序算法。在摆动序列中,相邻元素的大小关系轮流改变,即元素a[i]和a[i+1]满足a[i] < a[i+1],然后a[i+1] > a[i+2],以此类推。以下是关于Wiggle Sort摆动排序算法的详细解释:算法原理算法的思路是通过交换数组中的元素,将其重新排列成摆动序列。具体来说,遍历数组,如果:i是奇数且a[i] > a[i+1],或者i是偶数且a[i] < a[i+1],则交换a[i]和a[i+1]。

luthane的博客 795

LeetCode(力扣)376. 摆动序列Python

【代码】LeetCode(力扣)376. 摆动序列Python

qq_44953660的博客 252

LeetCode-Python-376. 摆动序列

说明:给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元素来获得子序列,剩下的元素保持其原始顺序。 https://leetcode-cn.com/problems/wiggle-subsequence/ 一道中等难度的贪心题。   示例 1: 输入: [1,7,4,9,2,5] 输出: 6 解释: 整个序列均为摆动序列。 示例 2...

Keep Coding 1637

Python | Leetcode Python题解之第376摆动序列

Python | Leetcode Python题解之第376摆动序列

Mopes__的博客 441

Leetcode 376. 摆动序列----python

1、题目描述 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。 例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为...

missTu~的博客 875

Leetcode刷题Python376. 摆动序列

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如,[1,7,4,9,2,5]是一个摆动序列,因为差值(6,-3,5,-7,3)是正负交替出现的。相反,[1,4,7,2,5]和[1,7,4,5,5]不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。...

BetterBench的博客 399

c语言摆动序列,LeetCode-python 376.摆动序列

题目链接难度: 中等 类型:动态规划如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个...

weixin_30839665的博客 193

每日一题:Leetcode 376 摆动序列(图解代码

题目名:Leetcode 376 摆动序列 https://leetcode-cn.com/problems/wiggle-subsequence/ 题目简述: 给个数组,问有最长的可以组成摆动序列的子序列有多长 方法:动态规划 知识点解释链接:https://www.zhihu.com/question/39948290 解析:https://leetcode-cn.com/problems/wiggle-subsequence/solution/bai-dong-xu-lie-by-leetcode-s

qq_42511414的博客 195

LeetCode 376.摆动序列

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如,是一个,因为差值是正负交替出现的。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。给你一个整数数组nums,返回nums中作为的。你能否用O(n)时间复杂度完成此题?

weixin_50878507的博客 321

LeetCode每日一题】——376.摆动序列

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。 相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。 子序列 可以通过从原

IronmanJay 534

算法学习——递推之摆动数列

算法描述 已知递推数列: a(1)=1 a(2i)=a(i)+1 a(2i+1)=a(i)+a(i+1) (i为正整数) 求该数列的第n项,以及前n项中的最大值为多少,其n为多少? 算法思路 采用递推的方法,使用一维数组,从2开始递推,一直递推到n a(i)=a(i/2)+1(n为偶数) a(i)=a((i+1)/2)+((i-1)/2) (n为奇数) 我们只需要使用一个是否...

weixin_30273175的博客 1786

蓝桥杯四月模拟赛python第八题摆动序列--读佬哥代码

首先在看到这题,我的思路首先是做三个枚举,定义i,j,k,先把序列拍出来, while写法,先实现案例 然后,发现做不下去了,看佬哥代码的写法 佬哥的博文 https://blog.csdn.net/zhengwei223/article/details/105660318?spm=1001.2014.3001.5501 他是做的递归,但我不会递归。。。 MOD = 10000 m, n = (int(x) for x in input().strip().split(' ')) mem = [[0.

qq_29437513的博客 374

摆动排序 II Python解法

给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。你可以假设所有输入数组都可以得到满足题目要求的结果。来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/wiggle-sort-ii 例:输入:nums = [1,5,1,1,6,4] 输出:[1,6,1,5,1,4] 解释:[1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。解析:中间的数比两边的数大,那么

皮_客的博客 514

Python 学习笔记:算法摆动排序

一、摆动排序 摆动排序是指:将给定的数字序列排序成摆动序列摆动序列是指:如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。摆动序列分为严格摆动序列和非严格摆动序列: 严格摆动序列:满足条件 A[0]<A[1]>...

yihuliunian的博客 870

摆动序列 动态规划 python

摆动序列 动态规划 python

weixin_52596361的博客 842

【Spring Cloud Alibaba】Linux安装RocketMQ以及RocketMQ Dashboard可视化工具

在当今分布式架构的开发中,消息队列成为了一种常见的解决方案。RocketMQ是阿里巴巴开源的分布式消息中间件,具有高吞吐量、高可用性和强大的扩展性,因此在构建大规模、高可靠性的应用系统时备受推崇。而在使用RocketMQ时,为了更好地了解消息的流动和监控,RocketMQ Dashboard成为了一个不可或缺的可视化工具。本篇博客将带大家一步步在Linux系统中安装RocketMQ,并介绍如何配置和使用RocketMQ Dashboard。

编码人生 3298

工具变量-2023-2001年上市公司信息披露考评数据.xlsx

详细介绍及样例数据:https://blog.csdn.net/T0620514/article/details/145538280

上一篇: 剑指 Offer 59 - II. 队列的最大值python
下一篇: 剑指 Offer 37. 序列化二叉树python
岗岗ganggang
博客等级 码龄10年 47粉丝 267原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值