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

力扣2576. 求出最多标记下标

在这里插入图片描述
在这里插入图片描述
这一题的大意是在一个整数数组中,我们可以对这些数组进行标记,现在要找最多能标记的数目。什么样的元素可以被标记,任意两个元素i,j,2*nums[i]<=nums[j],那么可以被标记。
那么我们应该怎么找呢?什么样的情况下符合条件呢?
这里需要贪心地想,nums[i]*2尽可能的小,nums[j]尽可能的大,那么就是最容易符合条件的。
因为数据范围是10^5,那么如果暴力枚举所有符合条件的下标,判断它们是不是符合条件,显然是O(n ^ 2)是超时的,那么可以采用二分答案,我们猜假设有x个符合条件的对数。
我们需要对数组先进行排序,为什么呢?排序后小的下标就都在左边,大的下标都在右边,我们只需要判断是否左右两边有足够的对数,使得符合条件即可
完整代码如下:

class Solution {
public:bool check(int x,vector<int>& nums){int n=nums.size();if(x>n/2){return false;}for(int i=0;i<x;i++){if(nums[i]*2<=nums[n-x+i]){}else{return false;}}return true;}int maxNumOfMarkedIndices(vector<int>& nums) {//2 3 4 5// 那么肯定会有x对//  sort(nums.begin(),nums.end());int l=1;int r=1e5/2;int ans=0;while(l<=r){int mid=(l+r)/2;if(check(mid,nums)){ans=max(ans,mid);l=mid+1;}else{r=mid-1;}}return ans*2;}
};

比较不好想的就是:

        for(int i=0;i<x;i++){if(nums[i]*2<=nums[n-x+i]){}else{return false;}}

时间复杂度为O(logn)*O(n)
实际上这一题用排序+双指针更为简单
先排序
然后我们声明两个指针l,r
当l指向的元素 * 2<=r指针指向的元素,那么就符合条件,
符合条件后l++,r++
不符合条件 只把r++,去找更大的元素去满足条件。

class Solution {
public:int maxNumOfMarkedIndices(vector<int>& nums) {//2 3 4 5// 那么肯定会有x对//  sort(nums.begin(),nums.end());int i=0;int j=1;int n=nums.size();int cnt=0;while(i<n/2&&j<n){if(nums[i]*2<=nums[j]){i++;j++;cnt+=2;}else{j++;}}return cnt;}
};

时间复杂度就是排序的复杂度O(nlogn)

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

相关文章:

  • 做网站需要什么配置服务器工业产品设计软件
  • 大型语言模型基础之 Prompt Engineering:打造稳定输出 JSON 格式的天气预报 Prompt
  • [cpprestsdk] JSON类--数据处理 (`json::value`, `json::object`, `json::array`)
  • 2014 个人网站备案soho需要建网站吗
  • BugKu Web渗透之 文件包含2
  • 为什么建设营销型网站wordpress弹穿登陆
  • 高职示范校建设网站建设工程标准合同范本
  • GBASE8s数据库-常用SQL命令
  • 第 02 天:虚拟化与 Linux 设置(重点:VirtualBox 实践)
  • 服务器实时流量监控工具推荐:确保服务器不被滥用
  • 深度学习------YOLOv5《第二篇》
  • Google Drive 超大文件下载到服务器
  • vscode中Java开发环境的配置
  • 【穿越Effective C++】条款5:了解C++默默编写并调用哪些函数——编译器自动生成的秘密
  • docker镜像从服务器Acopy到服务器B
  • 网站开发微信端小说网站如何建设
  • 网站建设黄页视频wordpress的标签设置主页
  • 学习java线程池ThreadPoolExecutor类使用介绍
  • 有关建设旅行网站的建设负责网站的建设规划
  • 学Java第三十七天-------常用API
  • 微信漫画网站模板wordpress 视频展示
  • 【NestJS】依赖注入:超越自动new的深层解析
  • 北京网站建设策划建设公司长春建站培训
  • Mac常用软件
  • 【Linux笔记】网络部分——基于Socket套接字实现最简单的HTTP协议服务器
  • Linux基础知识(三、Linux常见操作目录命令)
  • 类似凡科建站的平台手机网站仿站
  • 在网站文字上做笔记设计制作中国第一架飞机的人是
  • C++ 分治 快速选择算法 堆排序 TopK问题 力扣 215. 数组中的第K个最大元素 题解 每日一题
  • 永磁同步电机无速度算法--基于相位超前校正的LESO