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

湛江有人做网站 的吗永久观看不收费的直播

湛江有人做网站 的吗,永久观看不收费的直播,wordpress修改边栏字体颜色,南阳疫情最新情况文章目录 Minimum Operations to Halve Array Sum 将数组和减半的最少操作次数问题描述:分析代码TLE优先队列 Tag Minimum Operations to Halve Array Sum 将数组和减半的最少操作次数 问题描述: 给你一个正整数数组 nums 。每一次操作中,你…

文章目录

  • Minimum Operations to Halve Array Sum 将数组和减半的最少操作次数

Minimum Operations to Halve Array Sum 将数组和减半的最少操作次数

问题描述:

给你一个正整数数组 nums 。每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小恰好 一半。(注意,在后续操作中你可以对减半过的数继续执行操作)

请你返回将 nums 数组和 至少 减少一半最少 操作数。

1 < = n u m s . l e n g t h < = 1 0 5 1 < = n u m s [ i ] < = 1 0 7 1 <= nums.length <= 10^5\\ 1 <= nums[i] <= 10^7 1<=nums.length<=1051<=nums[i]<=107

分析

目标是将数组的和减少到原始数组和的一半,而且是最小的操作数。

一次操作可以选任意的元素减半,而且可以重复选择某个下标的元素。所以几乎不存在限制

也就是说一定在经过若干次操作后,可以达到目标

记原始数组和为 s u m sum sum,那么目标就是 h a l f = s u m / 2 half = sum/2 half=sum/2;
但是问题是要求最少的,所以细化一下目标,

  • 如果最后一次的操作使得最新的数组和 s ′ = = h a l f s'==half s==half,说明这是最后一次操作,
  • 同样如果 s ′ < h a l f s'<half s<half,也是说明最后一次操作。
  • 如果 s ′ > h a l f s'>half s>half,说明还需要进行操作。

而且为了使得能够尽快使 s ′ s' s靠近到目标 h a l f half half,每次一定是选择当前数组中 m a x max max,进行操作。

暴力

如果是暴力的算法,就是每次选择最大,然后减半,放回去,再找一次最大,循环往复。

每次找数组的最大值时间复杂度 O ( N ) O(N) O(N),而且要达到目标需要操作N次,整体的时间复杂度为 O ( N 2 ) O(N^2) O(N2).

所以这个暴力的时间复杂度有TLE的风险。

优先队列

所以就需要进行加速,而唯一能选的就是优先队列
在优先队列中的维护一个最大值或最小值的平均时间复杂度是 O ( l o g N ) O(logN) O(logN),所以整体的时间复杂度就会降低到 O ( N l o g N ) O(NlogN) O(NlogN).

同时需要注意的是数据的范围,以及精度

代码

TLE

public int halveArray(int[] nums) {Double tot = 0.0;int n = nums.length;Double[] arr = new Double[n];for(int i =0;i<n;i++){arr[i] = nums[i]*1.0;tot+= arr[i];}Double half = tot*0.5;int ans =0;for(int i =0;i<n;i++){if(half<=0) break;int id =0;double max = arr[id];for(int j =0;j<n;j++){if(arr[j]>max){max = arr[j];id = j;}}arr[id] *= 0.5;half -= arr[id];ans++;}return ans;}

时间复杂度 O ( N 2 ) O(N^2) O(N2)

空间复杂度 O ( 1 ) O(1) O(1)

优先队列

public int halveArray(int[] nums) {PriorityQueue<Double> pq = new PriorityQueue<Double>((a,b)->{return b.compareTo(a);});Double tot = 0.0;for(int num: nums){Double t = num*1.0;tot+=t;pq.offer(t);}          Double half = tot*0.5;int ans =0;while(half>0&&!pq.isEmpty()){Double t = pq.poll();t *=0.5;half -= t;ans++;pq.offer(t);}return ans;}

时间复杂度 O ( N l o g N ) O(NlogN) O(NlogN)

空间复杂度 O ( N ) O(N) O(N)

Tag

Array

Greedy

Heap

http://www.hrbkazy.com/news/56262.html

相关文章:

  • 建设事业单位网站多少钱seo公司 彼亿营销
  • 成都电子商务网站建站百度官方app下载
  • b2b电子商务网站的收益模式是什么?广州seo公司官网
  • 天猫网站做的比京东好河北seo诊断培训
  • 企业网站设计概念整合营销案例
  • 成都市建设领域网站咨询电话优化营商环境
  • 沧州机械类网站建设手机清理优化软件排名
  • 重庆家居网站制作公司西安seo搜推宝
  • 现在网络推广方式重庆seo推广服务
  • 深圳建设个网站重庆森林经典台词梁朝伟
  • 图片高清处理在线百度灰色词优化排名
  • 百度上面如何做网站网络推广运营主要做什么
  • 城口集团网站建设市场调研报告内容
  • 石家庄做网站那家好360搜图片识图
  • 全功能asp政府网站源码 带网上办事在线指南等功能杭州云优化信息技术有限公司
  • 茂名专业网站建设怎么样推广自己的网址
  • 网站开发的相关技能有哪些上首页的seo关键词优化
  • php网站开发 知乎建网站seo
  • 网站建设专业英文百度seo提高排名费用
  • 网站建设需求登记表 免费下载seo案例分析方案
  • 网页制作公司公众号关键词排名优化
  • 安徽省建设造价管理协会网站seo推广怎么学
  • 求委托私人做网站线在科技成都网站推广公司
  • 做外贸比较好的网站有哪些江苏网页设计
  • wordpress 搜索伪静态北京网站优化效果
  • mockpuls可以做网站吗seo教育
  • wordpress评论ajax加载seo智能优化公司
  • 网站备案 公司名称关联性app线下推广怎么做
  • 网站推广临沂网址域名ip解析
  • 做公众号的必备参考网站湛江百度网站快速排名