8-27阿里笔试第一题

哥哥们,我好难受呀。为什么我的思路才过了4%,完全找不到错误的原因呀。
求助
#include <bits/stdc++.h>
using namespace std;
vector<int>v;
bool solve(int k,int lim){//  寻找是否可以添加 k个数,仍然保持当前值为最大值。
      int sum=0;
      for(int i=0;i<v.size();i++){
          if(v[i]<lim){
		  sum=sum+(lim-v[i]);
	  }
      }
      return sum>=k; 
}
int main(){
    int m,n,temp;
     cin>>m>>n;
     //v.assign(m,0);
     for(int i=0;i<m;i++){
        cin>>temp;       
	v.push_back(temp);
     }
     sort(v.begin(),v.end());
     long long  l=0;
     long long  r=1e9;
     long long  ans=0;
     while(l<r){
           long long  mid=l+r>>1;
	   if(solve(n,mid)){// 枚举当前mid为最大值,当满足条件,就往右找最小的。
		   r=mid;
		   ans=mid;
	   }
	   else l=mid+1;
     }
     cout<<ans<<endl;
     system("pause");
     return 0;
}


#阿里面试阿里巴巴##阿里巴巴##笔试题目#
全部评论
1.找最大值 2.计算填平数组要多少次操作 3.计算填平数组之后还能填平几层
1
送花
回复
分享
发布于 2021-08-27 20:29
我用的最小堆,不知道为啥也才4%
点赞
送花
回复
分享
发布于 2021-08-27 20:25
网易互娱
校招火热招聘中
官网直投
直接排序数组取最大值,然后从小到大遍历k=k-(max-arr[i]),最后如果k小于等于0,最大值就是原数组最大值,k大于0,最大值就等于最大值加上k除以数组长度(有余数+1)
点赞
送花
回复
分享
发布于 2021-08-27 20:31
其实对数组和k求和取个平均就行,只是感觉大小会溢出
点赞
送花
回复
分享
发布于 2021-08-27 20:37
我就每次取最小值,最小值加一,k次完了输出最大值,百分之五十,我就知道肯定超时😂
点赞
送花
回复
分享
发布于 2021-08-27 20:46
最小最大值 搞成 最大最小值了😥
点赞
送花
回复
分享
发布于 2021-08-27 22:13

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务