拼多多笔试题目

优化算法:在限制操作次数下使第k大数等于x的C++实现

大致题意:

题意:给定一个长度为n (n < 1e51e^51e5) 的数组,进行q(<1e51e^51e5)次对原数组的查询,问最小进行几次操作使得第k大的数为x (<1e91e^91e9),每次操作可以选择数组的某个数加1。
思路:二分+前缀和
首先对数组从大到小进行排序,然后求前缀和。
对于每次查询,二分查找找到第一个大于等于x的位置idx,答案为s[idx]+1∗(k−idx)∗x−s[k]s[idx]+1*(k-idx)*x-s[k]s[idx]+1(kidx)xs[k],注意题目可能存在爆int,需要开long long。

C++代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5+10;
LL s[N];
int main()
{
	int n,q,x,k;
	cin>>n>>q;
	vector<int> v;
	for(int i=0;i<n;i++)
	{
		cin>>x;
		v.push_back(x);
	}
	
	//逆序排列
	sort(v.rbegin(),v.rend());
	//求前缀和
	for(int i=1;i<=n;i++)
		s[i]=s[i-1]+v[i-1];
	while(q--)
	{
		cin>>k>>x;
		if(v[k-1]>x) //最小数比x还要大
		{
			puts("Impossible");
		}
		else{
            int idx=0;
			int l=0,r=n-1;
			while(l<r)
			{
				int mid=(l+r)>>1;
				if(v[mid]<x) r=mid;
				else l=mid+1;
			}
			idx=l;
			cout<<s[idx]+1ll*(k-idx)*x-s[k]<<endl;
		}
	}
	
	
	return 0;
} 
### 关于拼多多笔试题中的服务端开发相关问题 对于参与拼多多的服务端开发岗位笔试,候选人通常会遇到一系列涉及计算机科学基础知识以及实际编程能力的问题。这些问题旨在评估候选人的算法设计、数据结构理解和服务架构思维。 #### 数据库管理与优化 数据库操作是服务端开发者日常工作中不可或缺的一部分。常见的面试题目可能围绕SQL查询效率提升展开,比如如何通过索引提高读取速度或者怎样重构复杂查询语句来减少资源消耗[^1]。 #### 分布式系统原理 分布式系统的理解和实现也是考察重点之一。这包括但不限于一致性哈希算法的应用场景分析、CAP理论的实际意义探讨等内容。了解这些概念有助于构建高可用性和可扩展性的网络应用程序[^2]。 #### 编程技能测试 除了理论知识外,编写高效且无误的代码同样重要。可能会被要求完成特定功能模块的设计与编码工作,例如实现一个简单的缓存机制或是处理并发请求的方法等。此外,掌握至少一种主流后端语言(如Python, Java 或者 Go)是非常必要的[^3]。 ```python def reverse_linked_list(head): prev = None current = head while current is not None: next_node = current.next # Store the next node temporarily. current.next = prev # Reverse the link direction. prev = current # Move 'prev' one step forward. current = next_node # Move to the next node in original list. return prev # New head of reversed linked list. ``` 上述代码展示了单向链表反转函数的一个简单例子,在某些情况下也可能作为基础考核点出现在类似的在线评测环境中。 #### 性能调优技巧 针对大型互联网公司的技术挑战,性能问题是不可避免的话题。能够识别并解决内存泄漏、CPU瓶颈等问题的能力显得尤为珍贵。熟悉Linux命令行工具集可以帮助快速定位故障所在,并采取有效措施加以改善.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay_fearless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值