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

二分基础两道

Leetcode704:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

代码:

class Solution {
public:int search(vector<int>& nums, int target) {sort(nums.begin(), nums.end());int l, r, mid;l = 0, r = nums.size();//左闭右开,与结束循环条件l<r相对应while (l < r) {mid = (l + r) / 2;if (nums[mid] >= target) {//由于这种二分方法是利用l+1避免无限循环,因此r=mid的判定条件是合法即可(即加上等于号)//因为r不会+1,会一直将搜索结果保留在区间内r = mid;} else {l = mid + 1;}}if (l >= 0 && l < nums.size() && nums[l] == target)return l;elsereturn -1;}
};

Leetcode 209

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 

子数组

 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

典型的二分搜索答案类型题。以最终答案长度作为二分搜索的目标进行搜索。

class Solution {
public:bool check(int mid, int target, vector<int>& nums){int sum = 0;for(int i = 0;i<mid;i++){sum += nums[i];}if(target<=sum)return true;for(int i = mid;i<nums.size();i++){sum+=nums[i];sum-=nums[i-mid];if(target<=sum)return true;}return false;}int minSubArrayLen(int target, vector<int>& nums) {int sum = 0;for(int i = 0;i<nums.size();i++){sum += nums[i];}if(target>sum)return 0;int l,r,mid;l = 1,r = nums.size();while(l<r){mid=(l+r)/2;if(check(mid,target,nums)){r = mid;}else l = mid + 1;}return l;}
};
这道题还可以使用双指针,代码如下:
class Solution {
public:int minSubArrayLen(int s, vector<int>& nums) {int l,r;l=r=0;int sum = 0;int ans = INT_MAX;while(r<nums.size()){sum += nums[r];if(sum>=s){while(sum>=s){sum-=nums[l];l++;}ans = min(ans,r-l+2);}r++;}if(ans==INT_MAX)return 0;else return ans;}
};

http://www.lryc.cn/news/531168.html

相关文章:

  • Skyeye 云 VUE 版本 v3.15.7 发布
  • 位运算和操作符属性
  • php的使用及 phpstorm环境部署
  • 高阶开发基础——快速入门C++并发编程6——大作业:实现一个超级迷你的线程池
  • Jupyterlab和notebook修改文件的默认存放路径的方法
  • 吴恩达深度学习——有效运作神经网络
  • 享元模式——C++实现
  • 【Go语言圣经】第五节:函数
  • win32汇编环境,窗口程序中使用进度条控件
  • Vscode的AI插件 —— Cline
  • Flink (十三) :Table API 与 DataStream API 的转换 (一)
  • Android --- handler详解
  • [EAI-023] FAST,机器人动作专用的Tokenizer,提高VLA模型的能力和训练效率
  • 关于贪心学习的文笔记录
  • SLAM技术栈 ——《视觉SLAM十四讲》学习笔记(一)
  • 【ChatGPT:开启人工智能新纪元】
  • 1. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--前言
  • 量子力学初步:微观领域的科学之旅
  • 趣味Python100例初学者练习01
  • postgresql的用户、数据库和表
  • 对游戏宣发的粗浅思考
  • 【Java基础-42.3】Java 基本数据类型与字符串之间的转换:深入理解数据类型的转换方法
  • (9) 上:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同
  • webpack传输性能优化
  • 智能小区物业管理系统打造高效智能社区服务新生态
  • (done) MIT6.S081 2023 学习笔记 (Day7: LAB6 Multithreading)
  • 面试经典150题——栈
  • openmv的端口被拆分为两个 导致电脑无法访问openmv文件系统解决办法 openmv USB功能改动 openmv驱动被更改如何修复
  • 自制虚拟机(C/C++)(三、做成标准GUI Windows软件,扩展指令集,直接支持img软盘)
  • 算法题(56):旋转链表