
水题 结合题意双指针夹逼
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
const int MAXN = 3e4 + 10;
int arr[MAXN];
void ksort(int *arr, int fst, int lst)
{
int i = fst, j = lst, mid = arr[(i + j) / 2];
while(i <= j)
{
while(arr[i] < mid)
i++;
while(arr[j] > mid)
j--;
if(i <= j)
{
swap(arr[i], arr[j]);
i++;
j--;
}
}
if(i < lst)
ksort(arr, i, lst);
if(j > fst )
ksort(arr, fst, j);
}
int main()
{
int mc;
cin>>mc;
int n;
cin>>n;
for(int i = 0; i < n; i++)
cin>>arr[i];
ksort(arr, 0, n - 1);
int fst = 0, lst = n - 1, ans = 0;
while(fst <= lst)
{
if(arr[fst] + arr[lst] <= mc)
{
ans++;
fst++;
lst--;
}
else
{
ans++;
lst--;
}
}
cout<<ans<<endl;
return 0;
}
本文介绍了一种使用双指针解决特定类型问题的算法。通过一个具体的编程实例展示了如何运用双指针法来寻找数组中两个数之和小于等于给定值的有效数对数量。文章中的代码实现了对输入数据的快速排序,并采用双指针技术从两端逼近以求解问题。
1090

被折叠的 条评论
为什么被折叠?



