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

leecode-每日一题-2106. 摘水果

思路:

  1. 路径最多有一次折返(假设有更多次的往返,在相同左或右边界时,区间小于0次或1次往返)
    2.二分查找找到每次水果的左右边界+前缀和数组根据左右边界计算区域内结果。
int findR(int** fruits, int fruitsSize, int target){int left = 0, right = fruitsSize;if(fruits[fruitsSize-1][0] < target) return fruitsSize;while(left < right){int mid = left + (right-left)/2;if(fruits[mid][0] < target){left = mid+1;}else{right = mid;}}return left;
}
int findL(int** fruits, int fruitsSize, int target){int left = 0, right = fruitsSize-1;if(fruits[0][0] > target) return -1;while(left < right){int mid = left + (right-left+1)/2;if(fruits[mid][0] > target){right = mid-1;}else{left = mid;}}return right;
}
int maxTotalFruits(int** fruits, int fruitsSize, int* fruitsColSize, int startPos, int k) {if(fruitsSize == 0) return 0;int left = 0, right = 0;// 左边界的索引left = findR(fruits, fruitsSize, startPos-k);// 右边界的索引right = findL(fruits, fruitsSize, startPos+k);if(right < left ) return 0;int n = right-left+2;int prefix[n];prefix[0] = 0;for(int i=1; i<n; i++){prefix[i] = prefix[i-1]+fruits[left + i - 1][1];}int base = left;int res = 0;int i = left;int end = right;// 向左while(i < fruitsSize && fruits[i][0] < startPos){left = i;int ridex = fruits[i][0]+k-(startPos-fruits[i][0]);ridex = ridex > startPos ? ridex : startPos;// 右边界right = findL(fruits, fruitsSize, ridex);// 更新结果int tmp = right < left ? 0 : prefix[right+1-base]-prefix[left-base];res = tmp > res ? tmp : res;i++;}// 向右while(i < fruitsSize && i <= end){right = i;int lidex = fruits[i][0] - (k - (fruits[i][0]-startPos));lidex = lidex < startPos ? lidex : startPos;// 左边界left = findR(fruits, fruitsSize, lidex);// 更新结果int tmp = right < left ? 0 : prefix[right+1-base]-prefix[left-base];res = tmp > res ? tmp : res;i++;}return res;
}
http://www.dtcms.com/a/313401.html

相关文章:

  • vmfusion启动centos6.10 一直卡到call 169.254.169.254
  • 全面解析 BGE Embedding 模型:训练方式、模型系列与实战用法
  • Redis——常用指令汇总指南(三)(哈希类型)
  • 编写xsync集群分发脚本(保姆级别)
  • Redis 数据同步机制
  • 【Linux】Makefile Cmake—基操
  • [特殊字符]字节Get!免费进楼攻略速存[特殊字符]
  • LWIP从FreeRTOS到uC/OS-III的适配性改动
  • linux 扩展未分配的磁盘空间到home下
  • SQL157 更新记录(一)
  • 代码随想录算法训练营第五十八天|动态规划part8
  • 成功解决ImportError: DLL load failed while importing _multiarray_umath: 找不到指定的模块。
  • 深度学习中的模型知识蒸馏
  • 深度学习中卷积与互相关
  • 记录使用ruoyi-flowable开发部署中出现的问题以及解决方法
  • FastAPI-Vue3-Admin 一款Python 全栈融合的高可用中后台快速开发平台方案
  • golang 函数选项模式
  • 数据结构(概念及链表)
  • 【数据结构】队列的顺序存储与链式存储(C语言版)
  • 基于深度学习的医学图像分析:使用变分自编码器(VAE)实现医学图像生成
  • (FD Conv)Frequency Dynamic Convolution for Dense Image Prediction论文精读(逐段解析)
  • 07.config 命令实现动态修改配置和慢查询
  • [硬件电路-138]:模拟电路 - 什么是正电源?什么是负电源?集成运放为什么有VCC+和VCC-
  • Unix 发展史概览
  • 探索 Zephyr 项目:高效、可扩展的实时操作系统
  • 源代码本地安装funasr
  • C语言数据结构(6)贪吃蛇项目1.贪吃蛇项目介绍
  • 有限元方法中的数值技术:三角矩阵求解
  • Vulnhub Corrosion2靶机复现
  • 机器人抓取流程介绍与实现——机器人抓取系统基础系列(七)