【力扣】2401. 最长优雅子数组

题目

2401. 最长优雅子数组

在这里插入图片描述

解题思路

滑动窗口思想

  1. 扩大窗口:当新来的数与窗口内的数按位与运算都为0,则加入,扩大窗口,更新答案。
  2. 缩小窗口:如果新来的数与窗口内某个元素按位与运算不为0,则缩小窗口,直到新来的数与窗口内的数按位与运算都为0,再加入该数。

位运算

如何判断新来的数与窗口内的数按位与运算都为0?
暴力方法是循环窗口内的数一一比较,这样方法效率较低,可以考虑位运算。
使用一个int类型sum

  1. 加入一个数c就是 sum |= c
  2. 判断新来的数与窗口内的数按位与运算是否都为0就是 (sum & c) == 0
  3. 缩小窗口,移除一个数d就是 sum -= d

代码

class Solution {
    public int longestNiceSubarray(int[] nums) {
        // res保存结果
        int res = 0;
        // sum记录每位1的情况
        int sum = 0;
        // 滑动窗口左右指针
        int left = 0, right = 0;
        while(right < nums.length){
            int c = nums[right];
            right++;
            if((sum & c) == 0){  //新来的数与窗口内的数按位与运算都为0, 扩大窗口
                sum |= c;  // 加入一个数c
                res = Math.max(res, right - left);  //更新答案
            }else{  // 缩小窗口
                while(left < right && (sum & c) != 0){
                    int d = nums[left];
                    left++;
                    sum -= d;  // 移除一个数
                }
                sum |= c;  // 再加入该数
            }
        }
        return res;
    }
}
本文转载于网络 如有侵权请联系删除

相关文章

  • Python 基础语法(一)「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。Python的特点  1.简单    Python是一种代表简单思想的语言。  2.易学    Python有极其简单的语法。  3.免费、开源    Python是FLOSS(自由/开放源码软件)之一。  4.高层语言    使用Python编写程序时无需考虑如何管理程序使用的内存一类的底层细节。  5.可移植性    Python已被移植到很多平台,这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、  BeOS、OS/390、z/OS、PalmOS、QNX、VMS、Psion、AcomRISCOS、VxWorks、PlayStation、SharpZaurus、  WindowsCE甚至还有PocketPC。  6.解释性    可以直接从源代码运行。在计算机内部,python解释器把源代码转换为字节码的中间形式,然后再把它翻译成计算机使用的机器语言。  7.面向对象    Python既支持面向过程编程也支持面向对象编程。  8.可扩展性    部分程序

  • 关于百度ueditor编辑器上传图片的问题

    因为博客发布文章需要个富文本编辑器,所见即所得,排版什么的还是很重要的。百了很多最后还是决定用ueditor虽然已经被百度放弃了(不再更新)但是功能齐全插件多还是很好用的 第一次使用也是照着别人的教程写的 下载最新的ueditor-jsp版(根据自己的需求下载)http://ueditor.baidu.com/website/download.html 然后把下载好的内容放到web项目的webapp下,然后导包,我是直接把jar复制到web-inf的lib下然后buildpath,虽然这样会感觉好像太原始了。。,直接用maven导入会有问题,好像是因为ueditor不存在远程和本地仓库,不过可以在pom.xml中导入然后再把jar包复制到本地仓库,或者自己创建个私服然后把jar包放进去。。 修改config.json,"imageUrlPrefix": "http://www.zjhuiwan.cn/****", /* 图片访问路径前缀项目根路径                                               -这

  • 5分钟学会装系统(一)

    前言本教程适用于小白用户,也就是什么都不懂的小伙伴本教程是CGI相关教程不适合大佬浏览。。欢迎各位评论,讨论,补充,指出不正确的地方。需要u盘一只(8g起步吧),好的电脑一部。机智如你的小伙伴一只。下载pehttp://www.wepe.com.cn/download.html镜像也可以在里面下载,ghost镜像不提供下载地址,个人使用装机员官网的镜像(ghost)。 下载64位新版pe。 然后打开下载的exe安装PE进入BIOS/uefi选择u盘启动。现在新电脑插好u盘直接开机可以直接进PE。 如果不会可以私聊。这个部分后续会详细讲解。 ASUS的快捷键为F8。现在都是uefi可以使用鼠标找到。5加载中6选择第一个直接回车3执行之后等待完成。拔掉u盘,重启电脑就可以了。至此完结。这只是比较重要的过程。更多详细期待后续更新。

  • 那些年,我们用并行遇到的坑01

    背景:今天测试某一体机产品时,在性能压力测试部分,发现产品手册给出的测试用例,在有关并行度的操作中缺失了一些细节,而这很可能让经验不足的人无法高效的进行测试。 现在记录一下这个过程,并回顾那些年我们用并行遇到的坑:环境:OracleRAC11.2.0.4(3nodes)1.并行insert无效果2.并行只在本地节点3.增大并行度的效果4.所有节点并行测试1.并行insert无效果测试用例:createtableZ_OBJtablespaceTBS_1asselect*fromdba_objects; insert/*+appendparallel(t0,16)*/intoZ_OBJt0select/*+parallel(t1,16)*/*fromZ_OBJt1; commit; --多次执行并查询大小 selectowner,segment_name,bytes/1024/1024fromdba_segmentswheresegment_name='Z_OBJ';复制根据测试用例执行,发现实际并没有合理使用到并行度,效率很差(监控到I/O写入每秒只有百兆级别,正常应

  • 小程序开店指南:如何让你的门店出现在“附近的小程序”页面?

    什么是附近的小程序?商户可在小程序后台添加地点,展示这个小程序。当用户在此地点的周围,可在微信小程序入口中“附近的小程序”发现并使用小程序提供的服务。哪类小程序可使用“附近的小程序”功能?账号类型为企业、媒体、政府和其他组织的公众号和小程序使用“附近的小程序”功能。 类型为个人的小程序不能使用这个功能。对门店地点有哪些要求?1、地点的经营主体跟小程序账号主体一致或相关。 2、能提供经营资质信息,如营业执照或组织机构代码证等。如何让自己的小程序出现在“附近的小程序”?通过微信公众平台页面登录小程序。点击左边栏进入“附近的小程序”。点击页面右上角的“添加”。对照着你的营业执照,填写相应信息,最后提交。 通过审核后,即可添加地点。注意:一个公众号或小程序账号默认只能添加10个地点。如果你想调高地址额度,在得到上限提醒后,点击下载《调高地点额度申请表》,填写后发送至placeofminiprogram@qq.com。微信将在审核通过后为你调高额度。注意:调高地址额度没有限制。在附近在公众号后台添加地点审核通过后,可选择关联的小程序展示。注意:在小程序后台添加地点审核通过后,无需操作,小程序将自

  • 洛谷P4589 [TJOI2018]智力竞赛(二分答案 二分图匹配)

    题意题目链接给出一个带权有向图,选出n+1条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 SolTJOI怎么净出板子题二分答案之后直接二分图匹配check一下。多读读题就会发现题目要求的就是可相交的最小路径覆盖,那么按照套路先floyd一遍,如果能联通的话就再二分图中加边,然后判一下最大匹配数就行了。刚开始以为因为有的点可以不选,要在匈牙利的时候进行玄学贪心,其实是不用的,因为我们已经求过传递闭包了。所以直接求就是对的因为\(M\leqslant500\),所以Floyd的时候要用bitset优化一下#include<bits/stdc++.h> #definePairpair<int,int> #defineMP(x,y)make_pair(x,y) #definefifirst #definesesecond //#defineintlonglong #defineullsignedlonglong #defineLLlonglong #defineFin(x){freopen(#x".in","r"

  • 【老话新说】在springmvc中使用hibernate-validate

    老鸟绕道,新手可以看看,目前流行的SSM中都是使用的hibernate-validate进行验证,可以通过页面标签error显示或者以json方式(推荐),作为服务端,以json都行,可以被安卓或ios调用,也可以在网站上调用(跨域得用jsonp)PS:(所有图片都在博客上截取:http://www.cnblogs.com/leechenxiang)资源文件(可以省略不写,这样错误信息就可以直接在bean中直接写中文即可)被验证的bean(gettersetter已省略): controller,jsonform或者作为rest接口,都行(如果使用restfulewebserver或者spring4.2以后的cors,那么可以把error直接作为一个entity放入response返回即可,状态码标记500)

  • 从安全漏洞看印度国家银行APP为何“技术落后10年”

    2007年的时候,我在印度最大的国有银行中的一家注册了一个账号,这个国家的银行(政府或者民营)普遍所使用的技术与当前水平相比至少落后了10年。2015年末,我账号所在的银行与外包公司合作,开发了一款手机银行应用,分为安卓版和IOS版。这是一个典型的瑞典冬天的周末,没有阳光的迹象,所以我决定留在室内,并研究一下这个应用。0x00我一开始是打算用安卓来进行测试的,但是一想起上次在安卓上安装一个自签名证书(用于Burp监听)所遇到的挫折,我果断选择了iPhone6作为测试平台。当你在安卓上安装自签名证书时,安卓会一直提醒你“第三方证书已被添加到您的设备的信任库”,但是因为成本的关系你有时候不得不这么做(在企业环境或者测试环境中),再加上测试的过程中会一直看到讨厌的提醒信息“您的通信可能被监控”,所以IOS是最好的选择,我在MacBookPro上运行Burp用来作为代理服务器。 0x01Burp拦截到的初始请求显示了与app进行通信的主机名和端口,这是一个中间件应用程序,之所以会这样,那是因为银行通常会从大型厂商购买软件,比如说TCS的Bancs、Infosys的Finacle,、Oracle

  • integer类型比较大小_pow的值的数据类型

    大家好,又见面了,我是你们的朋友全栈君。IntegerTypes(ExactValue精确值)–INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINTMySQL支持SQL标准整数类型INTEGER(或INT)和SMALLINT。作为标准的扩展,MySQL还支持整数类型TINYINT、MEDIUMINT和BIGINT。下表显示了每个整数类型所需的存储和范围。.MySQL支持的整数类型的存储和范围Type类型Storage(Bytes)占用存储空间MinimumValueSigned带符号最小值MinimumValueUnsigned无符号最小值MaximumValueSigned带符号最大值MaximumValueUnsigned无符号最大值TINYINT1-1280127255SMALLINT2-3276803276765535MEDIUMINT3-83886080838860716777215INT4-2147483648021474836474294967295BIGINT8-2^6302^63-12^64-1资料来源https://dev.my

  • 跳频介绍_跳频功能

    大家好,又见面了,我是你们的朋友全栈君。 跳频是最常用的扩频方式之一,其工作原理是指收发双方传输信号的载波频率按照预定规律进行离散变化的通信方式,也就是说,通信中使用的载波频率受伪随机变化码的控制而随机跳变。从通信技术的实现方式来说,“跳频”是一种用码序列进行多频频移键控的通信方式,也是一种码控载频跳变的通信系统。从时域上来看,跳频信号是一个多频率的频移键控信号;从频域上来看,跳频信号的频谱是一个在很宽频带上以不等间隔随机跳变的。其中:跳频控制器为核心部件,包括跳频图案产生、同步、自适应控制等功能;频合器在跳频控制器的控制下合成所需频率;数据终端包含对数据进行差错控制。  与定频通信相比,跳频通信比较隐蔽也难以被截获。只要对方不清楚载频跳变的规律,就很难截获我方的通信内容。同时,跳频通信也具有良好的抗干扰能力,即使有部分频点被干扰,仍能在其他未被干扰的频点上进行正常的通信。由于跳频通信系统是瞬时窄带系统,它易于与其他的窄带通信系统兼容,也就是说,跳频电台可以与常规的窄带电台互通,有利于设备的更新。  通信收发双方的跳频图案是事先约好的,同步地按照跳频图案进行跳变。这种跳频方式称为常规跳

  • golang时间转换

    1.datetime转换成时间字符串 packagemain import( "fmt" "reflect" "time" ) funcmain(){ now:=time.Now()//当前datetime时间 fmt.Println(reflect.TypeOf(now))//打印当前时间的类型 fmt.Println(now)//打印当前时间 fmt.Println("***********************") t1:=now.Format("2006-01-0215:04:05")//把当前datetime时间转换成时间字符串 fmt.Println(t1) fmt.Println(reflect.TypeOf(t1)) } 复制 程序执行结果 time.Time 2019-09-1617:51:01.2357834+0800CSTm=+0.004988701 *********************** 2019-09-1617:51:01 string 复制 2.datetime转换成时间戳 packagemain import( "fm

  • C语言函数调用过程,汇编角度查看

    C语言函数调用过程,汇编角度查看 把函数的参数按照调用约定压栈或者存储到寄存器中 调用要使用的函数,先把调用者的地址入栈,方便回来 跳转到函数 把函数使用到的一些寄存器压栈,避免修改寄存器的值 执行函数 处理函数返回值 对于第4步中的压栈的那些寄存器,恢复他们原来的值 清空第一步中的压栈参数和处理返回值 返回到调用者调用时的地址(步骤一已经记录)继续往下执行

  • 《Elasticsearch实战》读书笔记

    遗留问题: 1._source字段和field字段的区别 2.q和search的区别(查询请求中) 3.输入关键字的大小写,参考prefix查询,match_phrase_prefix查询(4.4.2),有些查询不会被分析,所以区分大小写   第一章:ES介绍 1..快速查询:   1)Lucene使用倒排索引,创建一个数据结构,记录每个单词出现在哪些数据中的清单   2)为了提升搜索的性能和相关性,需要更多的磁盘空间来储存索引。增加新内容会越来越慢,因为每次添加数据就要更新索引。所以ES需要调优。 2.相关性:   1)词频、逆文档词频。   2)ES提供了很多内置功能来计算相关性得分,可以定制化,如:更新时间、出现位置、精确模糊 3.精确匹配:   1)处理错误的拼写   2)支持变体   3)使用统计信息   4)给予自动提示 4.ES的用法:当做独立的数据库、当做中间件(搜索)、当做工具(ELK)   第二章:深入功能 1.ES的逻辑结构:索引->类型->文档(数据库->数据表->行数据) 2.文档:    1)ES的最小单位   2

  • Python基础 ( 十 ) —— 面向对象补充1(其他的内置__XXX__方法)

    isinstance(obj,cls):判断对象obj是否为一个类cls实例化出来的对象,能反映继承关系,即B继承A,B实例化出来的对象b,isinstance(b,A)为True type():判断实例化出来的对象obj所属的类 issubclass(cls1,cls2):判断类cls1是否为类cls2的子类 raiseXXX:如 用来发出异常信号给屏幕,比如raiseAttributeError('异常')        __getattribute__:__getattr__的大哥,不管通过实例对象是否调用到某个方法或属性,都会先触发__getattribute__ 其实内置的__getattribute__大体就做了这么两件事: 1、如果实例对象能调用到某个方法或属性,则使得实例获取到这个方法或属性 2、如果调用不到则raiseAttributeError,然后这个操作会呼唤小弟__getattr__执行 (注意这个AttributeError被小弟接住了,不会程序中断;但是默认的__getattr__小弟自己的逻辑还

  • 协议分析-迅雷镜象服务器下载

    以在百度搜索qq关键字为例来分析迅雷下载,如下图所示,链接地址为:http://w.x.baidu.com/alading/anquan_soft_down_normal/12350打开迅雷,把链接地址输入到下载框当中,点击下载下载完成之后,发现主要流量是通过镜象服务器加速来下载的(下面的图是错误的,只是示意一下位置)。下面开始分析抓包:第一步骤:以http.request.full_uricontains12350为过滤条件,查看HTTP请求,看到请求的页面被重定向到http://dlsw.baidu.com/sw-search-sp/soft/3a/12350/QQ5.5.11447.0.1402466158.exe接下来是从原始地址多线程下载,这部分应该是从原始地址下载的流量,这部分先不分析了。接下来查看流量最大的一个流,这个是从镜象服务器下载的流量,从图中可以看出,via:server字段里面有CdnCacheServerV2.0,通过百度搜索得知,这个是网宿CDN标识的标识,通过进一步搜索得知,这个公司和迅雷有合作关系,确认这个是通过镜象服务器下载的流。再看看其它字段:dls

  • pycharm + django 解决跨域无提示

    如何解决pycharm配置跨域不提示? 正常我们需在在如上中间件内配置跨域,但是2019之前的版本配置中间件可能需要全部自己敲出来,不会有提示,那我们不妨换个位置试试   在TEMPLATES模板的最后一行(如上图位置所示)编写跨域的中间件会出现完整提示,如若提示不准确,可多打几个单词,以更准确的提示全部中间件配置     然后按住Ctrl鼠标左键单击CorsMiddleware,就会跳转到底层文件     然后就可以找到如上图所示的配置允许所有源访问的代码,只需复制以后放在文件的最下方(个人习惯)然后后面加上=True即CORS_ORIGIN_ALLOW_ALL=True即可。最后只需要将我们编写在TEMPLATES中的跨域中间件剪切后粘贴到MIDDLEWARE中间件的django.middleware.common.CommonMiddleware之前就可以啦!(如下图所示)   关注公众号:花花爱软件,回复“博客园”即可下载~

  • CSS美化之登录页面

    index.html <!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width",initial-> <linkrel="stylesheet"href="//at.alicdn.com/t/font_1803712_190aham4mrt.css"> <linkrel="stylesheet"href="style.css"> <title>LOGIN</title> </head> <body> <divclass="form-wrapper"> <divclass="header"> login </div> <divclass="input-wrapper"> <divclass="border-wrapper"> <i

  • 多项式计算

    编写C++程序求解多项式f(x)=a0+a1*x+a2*x2+...+an*xn 方法一: 1intMyFunction1(intA[],intn) 2{ 3intres=0; 4for(inti=0;i<=N;i++) 5res+=A[i]*pow(x,i); 6returnres; 7}复制 时间复杂度为O(n)+O(n2) 方法二: f(x)=a0+x*(a1+x*(...(an-1*x+an)...)) intMyFunction2(intA[],intn) { intres=0; for(inti=n;i>=0;i--) { res+=res*x+a[i]; } returnres; }复制 时间复杂度为O(n)。

  • pyppeteer基本使用demo

    #-*-coding:utf-8-*- #类似selenium,支持异步,不需要再单独安装环境,pyppeteer自动安装环境 #异步await要写到一个函数的内部 frompyppeteerimportlaunch importasyncio fromlxmlimportetree asyncdefmain(): #实例化一个浏览器,默认的是没有可视化界面 bro=awaitlaunch(headless=False) #打开空白网页 page=awaitbro.newPage() #在空白页发请求,这里访问一个动态加载的页面 awaitpage.goto('http://quotes.toscrape.com/js/') #获取当前页面返回的源码 page_text=awaitpage.content() returnpage_text defparse(task): #把协程函数中的结果返回到回调函中,开始解析 page_text=task.result() tree=etree.HTML(page_text) div_list=tree.xpath('//div[@

  • 盒子模型

    CSS盒子模型(BoxModel) 所有HTML元素可以看作盒子,在CSS中,"boxmodel"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。 盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。 下面的图片说明了盒子模型(BoxModel): 不同部分的说明: Margin(外边距)-清除边框外的区域,外边距是透明的。 Border(边框)-围绕在内边距和内容外的边框。 Padding(内边距)-清除内容周围的区域,内边距是透明的。 Content(内容)-盒子的内容,显示文本和图像。 元素的宽度和高度 重要:当您指定一个CSS元素的宽度和高度属性时,你只是设置内容区域的宽度和高度。要知道,完全大小的元素,你还必须添加填充,边框和边距。. 下面的例子中的元素的总宽度为300px: 实例 div{ width:300px; border:25pxsolidgreen; padding:25px; margin:25px; } 此时这个元素的实际宽度为: 300px(宽)+

  • 弹性盒布局display:flex详解

    一:弹性盒子 随着响应式设计的流行,网站开发者在设计网页布局时往往要考虑到页面在适配不同分辨率的浏览器时其内部组件位置大小都会产生变化,因此需要设计者根据窗口尺寸来调整布局,从而改变组件的尺寸和位置,以达到最佳的显示效果。本文介绍的就是一种实现这种变化的比较简单的模型:弹性盒子。 二:属性 首先要给父容器设置display:flex(或者inline-flex)属性,就可以让该父容器的布局方式变为弹性盒模型,接着,给父容器或者子元素设置不同属性来实现具体布局。 ①:给父容器添加的属性 1.flex-direction:属性决定主轴的方向(即项目的排列方向)。  row(默认值):主轴为水平方向,起点在左端。  row-reverse:主轴为水平方向,起点在右端。  column:主轴为垂直方向,起点在上沿。  column-reverse:主轴为垂直方向,起点在下沿。 2.flex-wrap:如果一条轴线排不下,如何换行.  nowrap(默认):不换行。当父容器宽度不够时每个item

相关推荐

推荐阅读