当前位置: 首页 > news >正文

Leetcode——数组的遍历系列练习

485. 最大连续 1 的个数

在这里插入图片描述

class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {// 记录最大连续1个数int max = 0;// 记录数组中存在1个数int sum = 0;// 遍历连续1个数int count = 0;for (int i = 0; i < nums.size() - 1; i++) {if (nums[i] == 1)sum++;if (nums[i] == nums[i + 1] && nums[i] == 1){count++;if (count > max) {max = count;}}else {count = 0;}}// 检查数组最后一个元素是否是1if (nums[nums.size() - 1] == 1){sum++;}// 起始计数均设为0,若数组中存在1则实际count应多一if (sum > 0) {max++;}return max;}
};

本人解法非常绕,思路很乱,边界值测试好多遍才通过。学习优解答案!!

答案
在这里插入图片描述

class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {int max = 0;int count = 0;for (int i = 0; i < nums.size(); i++) {// 如果是元素1则计数++if (nums[i] == 1){count++;}// 不是1则不连续,对比max和count进行max更新,计数重置为0else {if (max < count)max = count;count = 0;}}// 对比max和count进行max更新if (max < count)max = count;return max;}
};
};

summary:主要没有把握题目中仅有0,1两种元素对于连续的操作。

495.提莫攻击

在这里插入图片描述

class Solution {
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int sum = 0;// 先不考虑最后一次攻击for (int i = 0; i < timeSeries.size() - 1; i++) {// 攻击+持续时间<下一次攻击时间,则可以在持续时间内均中毒if (timeSeries[i] + duration - 1 < timeSeries[i + 1]){sum += duration;}// 否则,只能在两次连续攻击中间时间中毒,此时间<持续时间else{sum = sum + timeSeries[i + 1] - timeSeries[i];}}// 最后一次攻击永远可以持续中毒return sum + duration;}
};

答案
在这里插入图片描述

class Solution {
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int ans = 0;int expired = 0;for (int i = 0; i < timeSeries.size(); ++i) {// 未中毒,则可以完成duration中毒if (timeSeries[i] >= expired) {ans += duration;} else {// 正在中毒,减去上次中毒结束时间ans += timeSeries[i] + duration - expired;}// 未中毒起始时间expired = timeSeries[i] + duration;}return ans;}
};

414. 第三大的数

在这里插入图片描述

class Solution {
public:int thirdMax(vector<int>& nums) {// sort排序数组函数sort(nums.begin(), nums.end());// reverse反转数组函数reverse(nums.begin(), nums.end()); // erase去重数组函数nums.erase(unique(nums.begin(), nums.end()), nums.end()); if(nums.size()>=3){return nums[2];}else{return nums[0];}}
};

答案
在这里插入图片描述

class Solution {
public:int thirdMax(vector<int> &nums) {// greater从大到小排序sort(nums.begin(), nums.end(), greater<>());for (int i = 1, diff = 1; i < nums.size(); ++i) {if (nums[i] != nums[i - 1] && ++diff == 3) { // 此时 nums[i] 就是第三大的数return nums[i];}}return nums[0];}
};

628. 三个数的最大乘积

class Solution {
public:int maximumProduct(vector<int>& nums) {int len = nums.size();// 将数组降序sort(nums.begin(), nums.end(), greater<>());// 能得到三个数乘积最大值有两种情况:// 1.全部为正数数组升序排列后,前三个元素乘积最大// 2.既含有正数也含有负数的数组,两个中最大的负数和最大的正数相乘也可能得到最大乘积// 3.两种情况比较得出最大值返回int result = nums[0] * nums[1] * nums[2];int result1 = nums[0] * nums[len - 1] * nums[len - 2];if (result < result1) {return result1;}else {return result;}}
};
http://www.lryc.cn/news/188419.html

相关文章:

  • 免费的ChatGPT与StableDiffusion AI绘画 二合一 附在线地址
  • vivado FFT IP仿真(3)FFT IP选项说明
  • 正点原子嵌入式linux驱动开发——Busybox根文件系统构建
  • React闭包
  • 【VS Code】推荐一套我非常喜欢的主题和字体样式
  • 【SQL】MySQL中的约束
  • css div左右布局
  • 06_Node.js服务器开发
  • git中添加不上传的文件夹或文件的名字
  • Android: edittext禁止输入空格和特殊字符代码记录
  • SpringMVC常用注解
  • 微信小程序
  • Python教程——配置环境,再探IDE
  • java BigDecimal取消科学计数法显示
  • 南昌新颜|AIGC艺术之光,历史的魅力与未来的探索
  • 电容笔有必要买吗?电容笔牌子排行
  • SpringCloud学习笔记-Ribbon负载均衡
  • 安装JAVA 依赖环境 Maven 教程
  • 小程序A跳转小程序B并且自动登录
  • 【微服务部署】八、HAProxy+Keepalived高可用负载均衡集群配置
  • 机器学习(21)---召回率(recall)、精度(precision)和准确率(accuracy)
  • EsayExcel让不同标题有不同的颜色
  • Ant Design of React 创建项目及运行环境
  • NoSQL之Redis 主从复制配置详解及哨兵模式
  • 界面组件DevExpress WinForms v23.2新功能预览 - 增强MVVM相关功能
  • vue3前端开发-开发环境安装篇
  • MVCC和BufferPool缓存机制
  • 论文阅读笔记(Clover: 计算与存储被动分离的分布式键值存储系统)
  • 大模型推理框架概述
  • 抖音商品详情数据接口,抖音商品详情API接口