【vector题解】连续子数组的最大和 | 数组中出现次数超过一次的数字

连续子数组的最大和

连续子数组的最大和_牛客题霸_牛客网

描述

输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。

要求:时间复杂度为 O(n),空间复杂度为 O(n)

进阶:时间复杂度为 O(n),空间复杂度为 O(1)

示例1

输入:[1,-2,3,10,-4,7,2,-5]
返回值:18
说明:经分析可知,输入数组的子数组[3,10,-4,7,2]可以求得最大和为18  
   

示例2

输入:[2]
返回值:2

思路

输入的数组可以分为两种情况:

举例说明下这种思路(假如返回的结果存在ret里):

实现

Way1:时复O(n),空复O(1)

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int>& array) {
        int ret=0,tmp=0;
        for(auto k:array){
            if(tmp+k<0){
                tmp=0;
            }
            else{
                tmp+=k;
            }
            ret=max(ret,tmp);
        }
        if(ret==0){  //说明全是负数
            return *max_element(array.begin(),array.end());
        }
        return ret;
    }
};

Way2:时复O(n),空复O(n)

思路还是“遍历时算结果”,只不过我们用栈来保存和。只有结果比栈顶数据大,才能入栈,这样遍历完 栈顶就是最大和了。

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int>& array) {
        stack<int> st;
        int ret=0;
        for(auto k:array){
            ret+=k;
            if(ret<=0){
                ret=0;
            }
            else if(st.empty()
            ||!st.empty()&&ret>st.top()){
                st.push(ret);
            }
        }
        if(st.empty()){
            return *max_element(array.begin(),array.end());
        }
        return st.top();
    }
};

反思

我一开始总想着,怎么去找到这个 子数组的起始元素,怎么去找到末尾元素。我想着,先把子数组找到,然后算加起来的和。这其实路子走歪了。

连续子数组不是重点,我们根本不需要找到它,我们的重点,应该放在最大和上!

计算机拿到这个数组,就是把它从头到尾遍历,那我要做的,就是在遍历过程中,怎么找到最大和。

所以我要模拟这个遍历、算和的过程。

数组中出现次数超过一半的数字

数组中出现次数超过一半的数字_牛客题霸_牛客网

给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。

要求:空间复杂度:O(1),时间复杂度 O(n)

输入描述: 保证数组输入非空,且保证有解

示例1:

输入:[1,2,3,2,2,2,5,4,2]
返回值:2

示例2:

输入:[3,3,3,3,2,2,2]
返回值:3

示例3:

输入:[1]
返回值:1

思路

Step1. 算长度len,数组出现的次数>len/2

Step2. 统计次数

这道题要思考的点就在于,怎么在时复O(n)的情况下,统计次数?

这说明,遍历一遍数组,我就要知道当前数的次数了。因为没有额外的空间去记录每个数据的次数,所以我遍历的时候就要判断次数是否> len/2。

之前我总结了一句话“有重复,想排序!”,这道题就可以用上。

先给数组排序,把相同的放一起 便于统计。遍历时,设一个记录次数的count,遍历一遍,前后相同就用count++来计数。

实现

class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int>& numbers) {
        int half=numbers.size()/2;
        int count=1;
​
        sort(numbers.begin(),numbers.end());
        for(int i=0;i<numbers.size();i++){
            if(i>0&&numbers[i]==numbers[i-1]){
                count++;
            }
            else{
                count=1;
            }
​
            if(count>half){
                return numbers[i];
            }
        }
        return 0;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫框架Scrapy:实现高效数据抓取

目录 一、引言 二、Scrapy框架概述 1、Scrapy框架特点 2、Scrapy框架结构 三、Scrapy框架的使用 1、安装Scrapy框架 2、创建Scrapy项目 3、创建爬虫 4、运行爬虫 四、Scrapy框架常见问题及解决方案 1、请求被网站封禁 2、处理动态加载的页面 3、避免被网站检测到爬…

C#查看启用或关闭的Windows功能

通过命令查看启用或关闭的Windows功能&#xff0c;以管理员身份打开powershell&#xff0c;输入命令get-windowsoptionalfeature -online 得出结果如下&#xff1a; 如果使用C#查看&#xff0c;需要先安装System.Management 代码如下&#xff1a; private void isInstall() …

pinpoint监控tomcat应用,页面显示No data collected

pinpoint安装部署教程大家都可以搜到。这里就不说了。单说一下 页面没有数据的情况。 部署环境&#xff0c;pinpoint安装部署在A服务器上。现在是在C、D、E、F……linux机器上安装pinpoint-agnet 1. 将文件 pinpoint-agent-1.8.5.tar.gz 上传到 服务器C、D、E、F…… 2. 解压…

MQTT协议消息代理服务公网远程连接

文章目录 前言1. Linux 搭建 Mosquitto2. Linux 安装Cpolar3. 创建MQTT服务公网连接地址4. 客户端远程连接MQTT服务5. 代码调用MQTT服务6. 固定连接TCP公网地址7. 固定地址连接测试 前言 Mosquitto是一个开源的消息代理&#xff0c;它实现了MQTT协议版本3.1和3.1.1。它可以在不…

Spring Cloud 微服务入门篇

文章目录 什么是微服务架构 Microservice微服务的发展历史微服务的定义微小的服务微服务 微服务的发展历史1. 微服务架构的发展历史2. 微服务架构的先驱 微服务架构 Microservice 的优缺点1. 微服务 e Microservice 优点2. 微服务 Microservice 缺点微服务不是银弹&#xff1a;…

C语言---插入排序、希尔排序、冒泡排序、选择排序、快速排序简单介绍

文章目录 插入排序希尔排序冒泡排序选择排序快速排序 本文主要介绍用C语言实现的一些排序方法&#xff0c;有插入排序、希尔排序、冒泡排序、选择排序和快速排序&#xff0c;文章中给出的例子都是按照升序排列的。 插入排序 若数组只有一个元素&#xff0c;自然不用排序&#…

和数链“分布式存储”技术结合隐私计算让数据更安全

存储是IT业的核心技术&#xff0c;全球存储行业历经半个世纪的洗礼&#xff0c;在技术和需求相互促进的演变下沧桑变幻&#xff0c;经历桌面级存储、企业级存储、云存储多次迭代变迁。 目前的存储方式主要是“大数据中心”等集中式存储&#xff0c;随着数据规模和复杂度的迅速…

如何用Java实现一个基于机器学习的情感分析系统,用于分析文本中的情感倾向

背景&#xff1a;练习两年半&#xff08;其实是两周半&#xff09;&#xff0c;利用工作闲余时间入门一下机器学习&#xff0c;本文没有完整的可实施的案例&#xff0c;由于知识体系不全面&#xff0c;目前代码只能运行&#xff0c;不能准确的预测 卡点&#xff1a; 1 由于过…

Java自学第6课:电商项目(2)

1 创建工具类并连接数据库 在工程src右键单击new&#xff0c;新建util包 再创建DBUtil类 数据库交互需要有数据库支持的包&#xff0c;这是官方给出的类库。 先声明1个代码块 // 静态代码块 只加载1次static{try {Class.forName("com.mysql.jdbc.Driver");} catch (…

Kotlin文件和类为什么不是一对一关系

在Java中&#xff0c;一个类文件的public类名必须和文件名一致&#xff0c;如何不一致就会报异常&#xff0c;但是在kotlin的文件可以和类名一致&#xff0c;也可以不一致。这种特性&#xff0c;就跟c有点像&#xff0c;毕竟c的.h 和 .cpp文件是分开的。只要最终编译的时候对的…

无人机红外相机的畸变矫正

在项目开展过程中&#xff0c;发现大疆M30T的红外相机存在比较明显的畸变问题&#xff0c;因此需要对红外图像进行畸变矫正。在资料检索过程中&#xff0c;发现对红外无人机影像矫正的资料较少&#xff0c;对此&#xff0c;我从相机的成像原理角度出发&#xff0c;探索出一种效…

史上第一款AOSP开发的IDE (支持Java/Kotlin/C++/Jni/Native/Shell/Python)

ASFP Study 史上第一款AOSP开发的IDE &#xff08;支持Java/Kotlin/C/Jni/Native/Shell/Python&#xff09; 类似于Android Studio&#xff0c;可用于开发Android系统源码。 Android studio for platform&#xff0c;简称asfp(爱上富婆)。 背景&下载&使用 背景 由…

2022最新版-李宏毅机器学习深度学习课程-P34 自注意力机制类别总结

在课程的transformer视频中&#xff0c;李老师详细介绍了部分self-attention内容&#xff0c;但是self-attention其实还有各种各样的变化形式&#xff1a; 一、Self-attention运算存在的问题 在self-attention中&#xff0c;假设输入序列&#xff08;query&#xff09;长度是N…

leetcode:LCP 11. 期望个数统计(python3解法)

难度&#xff1a;简单 某互联网公司一年一度的春招开始了&#xff0c;一共有 n 名面试者入选。每名面试者都会提交一份简历&#xff0c;公司会根据提供的简历资料产生一个预估的能力值&#xff0c;数值越大代表越有可能通过面试。 小 A 和小 B 负责审核面试者&#xff0c;他们均…

Python克隆单个网页

网上所有代码都无法完全克隆单个网页&#xff0c;不是Css&#xff0c;Js下载不下来就是下载下来也不能正常显示&#xff0c;只能自己写了&#xff0c;记得点赞~ 效果如图&#xff1a; 源码与所需的依赖&#xff1a; pip install requests pip install requests beautifulsoup4…

Zigbee—网络层地址分配机制

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;孤雏 0:21━━━━━━️&#x1f49f;──────── 4:14 &#x1f504; ◀️ ⏸ ▶️ ☰ &#x1f497;关注…

CSS特效004:hover图片,显示文字或附加层

css实战中&#xff0c;时常会碰见鼠标放在某个区块上&#xff0c;显示出一段文字或者其他附加信息。思路是利用position的层叠关系&#xff0c;将文字层放在图片的上面&#xff0c;display:none; hover的时候层 display&#xff1a;block。 效果图 源代码 /* * Author: 大剑师…

windows系统自动更新中断电导致系统无法开启

windows系统自动更新中断电导致系统无法开启 现象原因解决进入bios拆机更新系统重新安装内存条 现象 前一天晚上电脑出现合上之后风扇继续转的现象&#xff0c;拔掉电源后&#xff0c;第二天开不了机。现象为按压电源键&#xff0c;电源键和充电指示灯亮一次后熄灭&#xff0c…

复盘一个诡异的Bug

该Bug的诡异之处在于这是一个由多种因素综合碰撞之后形成的综合体。纵观整个排查过程&#xff0c;一度被错误的目标误导&#xff0c;花费大量功夫后才找到问题点所在&#xff0c;成熟的组件在没有确凿证据之前不能随意怀疑其稳定性。 前言 此前在接入两台粒径谱仪&#xff08;…

SPASS-探索性分析

探索性分析的意义 探索性分析更加强大,它是一种在对资料的性质、分布特点等完全不清楚的情况下,对变量进行更深入研究的描述性统计方法。在进行统计分析前,通常需要寻求和确定适合所研究的问题的统计方法, SPSS提供的探索性分析是解决此类问题的有效办法 探索性分析提供了很…