双指针算法-day15(分组循环)

server/2025/3/26 7:17:47/

1.股票平滑下跌阶段的数目

题目

解析

  • 注意点:答案要加上数组长度,单个数字也满足要求;

代码

class Solution {
public:long long getDescentPeriods(vector<int>& prices) {// 时间复杂度:O(n)// 空间复杂度:O(1)int n = prices.size();long long ans = 0;int i = 0;while(i < n){int start = i ++;while(i < n && prices[i] + 1 == prices[i - 1]){i ++;}ans += (long long)(i - start) * (i - start - 1) / 2;}return ans + n;}
};

2.汇总区间

题目

解析

  • 题目要求:就是将数组分割为多个连续的区间;
  • 注意点:从 i 就要开始判断,更新完答案要 i ++;

代码

class Solution {
public:vector<string> summaryRanges(vector<int>& nums) {// 时间复杂度:O(n)// 空间复杂度:O(1)int n = nums.size();vector<string> ans;int i = 0;while(i < n){string s = to_string(nums[i]);// 从 i 就要开始判断int start = i;while(i < n && nums[i] + 1 == nums[i + 1]){i ++;               }if(start != i) s += "->" + to_string(nums[i]);ans.push_back(s);i ++;// 移动指针}return ans;}
};

3.使数组元素相等的减少操作

题目

解析

  • 题目要求:把所有大于最小值的数变为最小值,且变为最小值需要的次数与距离有关
  • 首先要排除所有最小的值,从大于他的数开始遍历;
  • 例如:[2,3,4,5,5],答案计算为 (3 * 1) + (4 * 2) + (5 * 3) * 2;

代码

class Solution {
public:int reductionOperations(vector<int>& nums) {// 时间复杂度:O(nlogn)// 空间复杂度:O(1)int n = nums.size();int ans = 0;sort(nums.begin(),nums.end());int i = 1;while(i < n && nums[i] == nums[i - 1]){i ++;}int k = 1;while(i < n){int start = i ++;while(i < n && nums[i] == nums[i - 1]){i ++;}ans += (i - start) * k;k ++;}return ans;}
};

4.数组中的最长山脉

题目

解析

  • 先找到最长递增,再继续沿着找递减子序列;
  • 注意点:i 指针要回退,arr[i - 1] 为左峰;

代码

class Solution {
public:int longestMountain(vector<int>& arr) {// 时间复杂度:O(n)// 空间复杂度:O(1)int n = arr.size();int ans = 0;int i = 0;while(i < n){// 找到最长递增子序列int start = i ++;while(i < n && arr[i] > arr[i - 1]){i ++;}if(i - start < 2) continue;// 找到最长递减子序列int start_1 = i - 1;while(i < n && arr[i] < arr[i - 1]){i ++;}if(i - start_1 < 2) continue;ans = max(ans,i - start);i --;// 必须回退一位,arr[i - 1] < arr[i],是左峰}return ans;}
};

http://www.ppmy.cn/server/176971.html

相关文章

【leetcode hot 100 17】电话号码的字母组合

分析&#xff1a;当设计关键字“所有组合”时&#xff0c;要考虑深度优先遍历、广度优先遍历&#xff08;层次遍历&#xff09;&#xff0c;其中&#xff1a; 深度优先搜索&#xff1a; 自顶向下的递归实现深搜定义子问题在当前递归层结合子问题结果解决原问题 广度优先搜索 利…

【网络安全】从浏览器到服务端讲JavaScript安全

未经许可,不得转载。 原作者余弦,本文对原文进行二次创作。 文章目录 基本隐私收集XSS探针JSON 劫持内网浅渗透内网IP获取内网IP端口获取内网主机存活获取路由Web控制台操作内网脆弱Web应用控制突破浏览器边界XSS Virus攻击MongoDB数组绕过注入攻击MongoDB 查询条件绕过(Byp…

在C语言基础上学Java【Java】【一】

众所周知&#xff0c;Java是C风格的语言&#xff0c;对于学过C语言的人学Java可以快速适应。 废话不多说&#xff0c;直接边看代码边学。 数据类型&#xff0c;输入和输出 import java.util.Scanner;//为了使用Scanner public class a1 {//a1是类名&#xff0c;就是文件名&am…

Kubeasz工具快速部署K8Sv1.27版本集群(二进制方式)

文章目录 一、基本信息二、服务器初始化操作三、使用Kubeasz部署K8S集群四、验证集群 一、基本信息 1、部署需要满足前提条件&#xff1a; 注意1&#xff1a;确保各节点时区设置一致、时间同步&#xff1b;注意2&#xff1a;确保在干净的系统上开始安装&#xff1b;注意3&…

Linux 终端操作核心组合键

一、终端操作核心组合键 组合键功能描述使用场景示例Ctrl C强制终止当前正在运行的前台进程停止卡死的命令&#xff08;如 ping&#xff09;Ctrl D1. 发送 EOF&#xff08;文件结束符&#xff09; 2. 退出当前终端会话退出 bash 或 python 交互环境Ctrl Z暂停当前进程并放入…

Gitlab服务器数据迁移及版本升级

公司目前使用的GITLAB服务器&#xff0c;docker方式部署&#xff0c;GITLAB版本为13.11.0&#xff0c;由于版本太老存在安全漏洞&#xff0c;原服务器还部署了其他应用&#xff0c;不方便做升级操作&#xff0c;解决思路是将数据迁移新版本的gitlab服务器。 由于gitlab数据备份…

Word 小黑第40套

对应大猫43 主题 -浏览主题 -选择W样式标准文件就行 1级段落和2级段落&#xff08;用项目符号不影响原本段落文字符号 颜色修改为自动&#xff09; 整段变红的 不是把光标定位到红色字体那里 要选择几个红色字体 再创建样式 插入的空白页一定要是下一页&#xff0c;不能插空白…

Git(12)GitLab持续集成(CICD)

Git(12)之GitLab持续集成(CI/CD) Author: Once Day Date: 2025年3月18日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可查看专栏: Git使用记录_Once_day的博…