LLeetCode题目笔记——6258. 数组中最长的方波

news2024/11/25 12:33:27

文章目录

    • 题目描述
    • 题目难度——中等
    • 方法一:一次遍历+哈希
      • 代码Python暴力
      • 代码Python一次遍历
    • 总结

题目描述

这是这周周赛的第二题,本来想是不是双指针的解法,但想半天没想出来咋用双指针,就想到了哈希。

给你一个整数数组 nums 。如果 nums 的子序列满足下述条件,则认为该子序列是一个 方波 :

子序列的长度至少为 2 ,并且
将子序列从小到大排序 之后 ,除第一个元素外,每个元素都是前一个元素的 平方 。
返回 nums 中 最长方波 的长度,如果不存在 方波 则返回 -1 。

子序列 也是一个数组,可以由另一个数组删除一些或不删除元素且不改变剩余元素的顺序得到。

示例 1 :

输入:nums = [4,3,6,16,8,2]
输出:3
解释:选出子序列 [4,16,2] 。排序后,得到 [2,4,16] 。

  • 4 = 2 * 2.
  • 16 = 4 * 4.
    因此,[4,16,2] 是一个方波.
    可以证明长度为 4 的子序列都不是方波。
    示例 2 :

输入:nums = [2,3,5,6,7]
输出:-1
解释:nums 不存在方波,所以返回 -1 。

提示:

2 <= nums.length <= 105
2 <= nums[i] <= 105

题目力扣链接

题目难度——中等

方法一:一次遍历+哈希

  根据题目中的提示,最多10万个数据,这个量级的话暴力解法肯定会超时,因此我们只能在题目提示的排序之后的基础上进行一次遍历。首先将原数组转换为一个集合,以方便我们在后面遍历的时候判断元素是否在原数组里。每次遍历时,都为当前元素维护一个数组,存储满足条件的那些数,每次循环最后更新答案。
  先来看下暴力的解法。

代码Python暴力

class Solution:
    def longestSquareStreak(self, nums: List[int]) -> int:
        nums.sort()
        i, j, n = 0, 1, len(nums)
        res = 0
        table = set()
        for i in range(n):
            if nums[i] in table:
                continue
            subnums = [nums[i]]
            for j in range(i + 1, n):
                if nums[j] == subnums[-1] ** 2:
                    subnums.append(nums[j])
                    table.add(nums[j])
            # print(subnums)
            res = max(res, len(subnums))
        
        if res >= 2:
            return res
        else:
            return -1

代码Python一次遍历

class Solution:
    def longestSquareStreak(self, nums: List[int]) -> int:
        setnums = set(nums)
        nums.sort()
        res = 0
        for i in range(len(nums)):
            x = nums[i]
            tmp = [x]
            power = x ** 2
            while power in setnums:
                tmp.append(power)
                power *= power
            res = len(tmp) if len(tmp) > res else res
        
        return res if res > 1 else -1

在这里插入图片描述

总结

  暴力的时间复杂度是O(N2),空间是O(N),一次遍历每次判断元素在集合中是常数时间,遍历是O(N),所以整体是O(N)。空间都是O(N)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PostgreSQL数据库TPCC测试,Banchmarksql 5.0部署详解

1 BenchmarkSQL安装部署 1.1 部署Java环境 首先使用java - version查看是否已有 Java环境&#xff08;下图是有的情况&#xff09; 需要注意的是&#xff0c;虚拟机中默认的JDK貌似是不行的哦&#xff0c;请参考下面链接中的博文&#xff0c;教你怎么卸载重装 1.1.1 若没有J…

Python学习基础笔记四十四——模块1

1、看一个例子&#xff1a; 创建一个demo.py文件&#xff1a; print(in demo.py)def hello():print(in hello function) 然后我们在另外一个文件中import这个demo文件&#xff1a; import demo# 调用demo.py文件中的hello()函数 demo.hello() 注意&#xff0c;demo后面没有…

软件安全测试-BurpSuite使用详解

1.BurpSuite简介 Burp Suite 是用于攻击web 应用程序的集成平台&#xff0c;它包含了许多Burp工具&#xff0c;这些不同的burp工具通过协同工作&#xff0c;有效的分享信息&#xff0c;支持以某种工具中的信息为基础供另一种工具使用的方式发起攻击。 它主要用来做安全性渗透测…

我将 9 个 ChatGPT 账号接入微信,我现在整个人都麻了...

大家好&#xff0c;我是米开朗基杨。最近大家都被 ChatGPT 刷屏了&#xff0c;这家伙真是上天入地无所不能&#xff0c;不管什么问题都能解答&#xff0c;而且答案的质量非常高&#xff0c;完全不像机器人。于是乎我冒出个想法&#xff1a;如果把 ChatGPT 接入微信是什么感觉&a…

二维码介绍

二维码介绍 二维码&#xff08;2-dimensional bar code、二维条码&#xff09;是用某种特定的几何图形按一定规律在平面&#xff08;二维方向上&#xff09;分布的、黑白相间的、记录数据符号信息的图形&#xff1b;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1…

repo的安装和使用

前言 Android 采用 Gerrit 提供代码评审服务&#xff0c;并且开发了一个客户端工具 repo&#xff0c;实现多仓库管理。Git 的开发者对服务端的 Git 源码做了扩展&#xff0c;使得基于 Git&#xff08;cgit&#xff09;的代码平台可以很容易引入新的集中式工作流。同样 git-rep…

概率统计·参数估计【矩估计、极大似然估计、无偏性、有效性、相合性】

点估计 设总体的分布函数形式已知&#xff0c;但它的一个或多个参数为未知&#xff0c;借助于总体的一个样本来估计总体未知参数的值的问题称为点估计问题 矩估计 这个还是看例子会比较好理解一些 例 先μ1E(x)&#xff0c;μ2E(x2)有几个未知参数就列几次方的期望&#xff…

CSS -- 01. CSS基础

文章目录CSS基础1 CSS简介1.1 HTML的局限性1.2 CSS介绍1.3 CSS语法规范1.4 CSS代码风格2 CSS基础选择器2.1 选择器的分类2.2 标签选择器2.3 **类选择器**2.4 id选择器2.5 通配符选择器2.6 基础选择器总结3 CSS字体属性3.1 字体系列3.2 字体大小3.3 字体粗细3.4 文字样式3.5 字体…

[附源码]JAVA毕业设计医药垃圾分类管理系统(系统+LW)

[附源码]JAVA毕业设计医药垃圾分类管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

Day827.安全性、活跃性以及性能问题 -Java 并发编程实战

安全性、活跃性以及性能问题 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于安全性、活跃性以及性能问题的内容。 并发编程中需要注意的问题有很多&#xff0c;主要有三个方面&#xff0c;分别是&#xff1a; 安全性问题活跃性问题性能问题 一、安全性问题 相信一…

论文讲解p2p4

本人水平有限,很多地方可能有说错或者理解错的地方请指出,谢谢谅解 一.原始电路图 1.简介:本电路是从1977年一篇电荷重新分配的理念进化而来,论文如下: All-MOS charge redistribution analog-to-digital conversion techniques. --JAMES L. McCREARY 2.因为从一开始充电过…

Java使用H2数据库全方式汇总

H2是轻量级数据库&#xff0c; 可以不需要安装就可以运行&#xff0c;对于快速学习和演示比较适用。关于H2的基本内容可以参考&#xff1a; H2 数据库简介 。 本篇快速介绍H2数据库在各种类型的Java应用中的使用&#xff0c; 包括&#xff1a; Java 项目Java Web 项目Spring B…

《域渗透攻防指南》签名版预售来啦

千呼万唤始出来&#xff01;终于&#xff0c;在广大粉丝翘首期盼下&#xff0c;国内首本专门讲述域内攻防的书籍《域渗透攻防指南》在2022年最后一个月和大家见面了。为了回馈粉丝的等待&#xff0c;让粉丝早日拿到心仪的书&#xff0c;特此联合机械工业出版社弄了签名版书预售…

GLAD:部分相干光模拟

概述 一个理想的单色点光源发射的光是完全相干光。但实际物理光源不是点源&#xff0c;总是具有一定的空间尺度并包含众多辐射单元&#xff0c;其发出的光也非严格的单色光,其光谱具有一定宽度&#xff0c;这种光即部分相干光。产生部分相干光主要有三种方法&#xff1a; …

Python中常用的内置函数集合

这篇文章主要介绍了Python中常用的内置函数&#xff0c;主要介绍内容有map()、filter()、all()、int()等更多相关函数&#xff0c;需要的小伙伴可以看看。 一、map() map(func,iterable)&#xff0c;其中func为函数名&#xff0c;可为lambda匿名函数&#xff0c;iterable为可迭…

全栈Jmeter接口测试(二):jmeter组件元件介绍,利用取样器中http发送请求

JMeter 的主要测试组件总结如下&#xff1a; 1. 测试计划是使用 JMeter 进行测试的起点&#xff0c;它是其它 JMeter 测试元件的容器 2. 线程组代表一定数量的并发用户&#xff0c;它可以用来模拟并发用户发送请求。实际的 请求内容在Sampler中定义&#xff0c;它被线程组包含…

Camtasia Studio2023电脑屏幕录制软件免费版

TechSmith Camtasia Studio2023免费的屏幕录像视频编辑软件&#xff0c;最专业的电脑屏幕录制及编辑软件&#xff01;这款专业录屏与视频创作大型软件包含屏幕录像、视频编辑、视频菜单制作、视频录音配音、视频发布等系列强大功能。 全新的Camtasia 2023 让您用更短的时间创…

【图像隐写】GBT+SVD数字水印嵌入与提取【含Matlab源码 1668期】

⛄一、SVD数字水印简介 理论知识参考文献&#xff1a;基于DWT和SVD的彩色图像数字水印算法研究 一种基于DWT-SVD的图像数字水印算法 ⛄二、部分源代码 clc close all clear %% Input images Iimread(‘Lena.jpg’); Iimresize(I,[512,512]); logorandsrc(8,8,[0,1]); figur…

青春不过,几次世界杯,足球让我明白,努力的方向

人生就像足球&#xff0c;你不会永远进球&#xff0c;但会一直跑在路上&#xff01;直到遇到足球&#xff0c;我的人生彻底改变&#xff0c;我很记得我第一个足球的样子&#xff0c;在我心里&#xff0c;它就像一颗糖果 ——梅西⚽️ 随着2022卡塔尔世界杯的开赛&#xff0c;各…

GitHub上架即巅峰,《Spring Cloud微服务架构实战》标星已超30k

有人调侃我们说&#xff1a; 程序员不如送外卖。送外卖是搬运食物&#xff0c;自己是搬运代码&#xff0c;都不产出新的东西……透支体力&#xff0c;又消耗健康&#xff0c;可替代性极强&#xff0c;30岁之后就要面临被优化的危险……想跳槽&#xff0c;但是更高的平台难进&a…