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

二分|组合|旋转数组

 

lc1976

dijk   min_path

pq. min_w

 

 

 

lcr187

同lc1823.约瑟夫环

class Solution {
public:
int iceBreakingGame(int num, int target) 
{
int x=0;

for(int i=2;i<=num;i++)
{
x=(x+target)%i;
}    
return x;
}
};

 

lc2972

计算数组中可移除的子数组数量

先找最长递增前缀,再结合递增后缀统计符合条件的情况

class Solution {
typedef long long ll;
public:
long long incremovableSubarrayCount(vector<int>& a) {

int n = a.size();
int i = 0;
while (i < n - 1 && a[i] < a[i + 1]) {
i++;
}
if (i == n - 1) {
// 每个非空子数组都可以移除
return (ll)n * (n + 1) / 2;
}

        ll ans = i + 2;
// 不保留后缀的情况,一共 i+2 个
// 枚举保留的后缀为 a[j:]
for (int j = n - 1; j == n - 1 || a[j] < a[j + 1]; j--) {
while (i >= 0 && a[i] >= a[j]) {
i--;
}
// 可以保留前缀 a[:i+1], a[:i], ..., a[:0] 一共 i+2 个
ans += i + 2;
}
return ans;

}
};

 

 

lcp02

倒着连分数,把“里面的分数”先算好,再一层层包进“外面的数”里。

        int up=1;
int down=0;
for(int i=cont.size()-1;i>=0;i--){
swap(up,down);  //up变分母后
up+=cont[i]*down;  //更新计算

}
return{up,down};

 

class Solution {
public:
vector<int> fraction(vector<int>& cont) {
int up=1;
int down=0;
for(int i=cont.size()-1;i>=0;i--){
swap(up,down);  //up变分母后
up+=cont[i]*down;  //更新计算

}
return{up,down};
}
};

 

 

左闭右开

 

lc153 无重复元素

 

class Solution {
public:
int findMin(vector<int>& nums) 
{
int n=nums.size();
int l=0,r=n-1;
while(l<r)
{
int mid=l+(r-l)/2;
if(nums[mid]>nums[r])
l=mid+1;
else
r=mid;
}
return nums[l];
}
};

 

lc154

二分法,左闭右开

当中间值和最右值相等时

右边界r--  左移一步,缩小范围,排除重复元素干扰,最终找到最小值。

class Solution {
public:
int findMin(vector<int>& nums) 
{
int n = nums.size();
int l = 0, r = n - 1;

while (l < r) {
int mid = l + (r - l) / 2;
if (nums[mid] > nums[r]) 
l = mid + 1;

           else if (nums[mid] < nums[r]) 
// 右边界更新为mid(保留mid可能为最小值的情况)
r = mid;
else 
r--;

}
return nums[l];
}
};

 

http://www.dtcms.com/a/350912.html

相关文章:

  • SET FOREIGN_KEY_CHECKS=0
  • CentOS 部署 Prometheus 并用 systemd 管理
  • 似然函数对数似然函数负对数似然函数
  • 项目1:异步邮件发送系统实战
  • 自由学习记录(88)
  • 设计一个完整可用的 Spring Boot Starter
  • 深入浅出 ArrayList:从基础用法到底层原理的全面解析(下)
  • 2025职场进阶:低门槛技能实用手册
  • 编写Linux下usb设备驱动方法:probe函数中要进行的工作
  • css新特性
  • openharmony之DRM开发:数字知识产权保护揭秘
  • 智能体框架CAMEL-第三章
  • 学习嵌入式的第二十五天——哈希表和内核链表
  • 基于SpringBoot的物资管理系统【2026最新】
  • Linux网络服务(六)——iptables Forward实现内网服务暴露与访问外网
  • 直播美颜SDK技术解析:人脸美型功能的算法原理与实现方案
  • linux环境下 - 如何干净地卸载掉nvidia驱动
  • 工业通信协议综合调研报告
  • 深入浅出 ArrayList:从基础用法到底层原理的全面解析(上)
  • vue-Router中通过路由地址path中的数据转换为props传参,不建议添加多个可选参数
  • More Effective C++ 条款07:不要重载、和,操作符
  • linux的conda配置与应用阶段的简单指令备注
  • Typora + PicList + Gitee 图床完整配置教程
  • 《P1656 炸铁路》
  • C++ 编译链接杂谈——前向声明
  • JavaScript 类中静态变量与私有变量的区别及用法
  • eniac:世界上第一台通用电子计算机的传奇
  • 开发避坑指南(36):Java字符串Base64编码实战指南
  • 深度学习-----《PyTorch深度学习核心应用解析:从环境搭建到模型优化的完整实践指南》
  • 初步了解多线程