C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
c++ function to find the sum of four minimum maximum elements in an array not working
我正在解决一个问题,在这个问题中,我必须编写一个函数,该函数找到传递给它的数组中任何四个整数的最大和最小和,然后显示它。
这是我的代码:
void miniMaxSum(vector<int> arr) {
int minsum=0;
int maxsum=0;
int l1,l2,l3,l4;
int s1,s2,s3,s4;
l1=arr[0];
s1=arr[0];
for(int i=1;i<arr.size();++i)
{
if(l1<arr[i])
l1=arr[i];
if(s1>arr[i])
s1=arr[i];
}
l2=arr[0];
s2=arr[0];
for(int i=1;i<arr.size();++i)
{
if(l2<arr[i]&&arr[i]!=l1)
l2=arr[i];
if(s2>arr[i]&&arr[i]!=s1)
s2=arr[i];
}
l3=arr[0];
s3=arr[0];
for(int i=1;i<arr.size();++i)
{
if(l3<arr[i]&&arr[i]!=l2&&arr[i]!=l1)
l3=arr[i];
if(s3>arr[i]&&arr[i]!=s2&&arr[i]!=s1)
s3=arr[i];
}
l4=arr[0];
s4=arr[0];
for(int i=1;i<arr.size();++i)
{
if(l4<arr[i]&&arr[i]!=l2&&arr[i]!=l1&&arr[i]!=l3)
l4=arr[i];
if(s4>arr[i]&&arr[i]!=s3&&arr[i]!=s2&&arr[i]!=s1)
s4=arr[i];
}
minsum=s1+s2+s3+s4;
maxsum=l1+l2+l3+l4;
cout<<minsum<<" "<<maxsum;
}
此代码为 maxsum 提供了正确的输出,但最小值在所有测试用例中都是错误的。 请帮我找到代码中的错误 提前谢谢。
void miniMaxSum(vector<int> arr) {
sort(arr.begin(), arr.end());
int sumMin = 0, sumMax = 0, len = arr.size() - 1;
for(int i = 0; i < 4; i++){
sumMin += arr[i];
sumMax += arr[len - i];
}
cout<<"minimum sum: "<<sumMin<<endl;
cout<<"maximum sum: "<<sumMax<<endl;
}
如果你考虑复杂性,那么正如Daniel提到的,你可以使用O(N log N)
来做到这一点,但你可以使用O(N)
来做到这一点,其中N
是数组的长度。
这是代码段
void minMaxSum(vector<int> arr){
int l1, l2, l3, l4; // large element;
int s1, s2, s3, s4; // smallest element
l1 = l2 = l3 = l4 = INT_MIN;
s1 = s2 = s3 = s4 = INT_MAX;
for(auto i:arr){
if(i>=l1){
l4 = l3;
l3 = l2;
l2 = l1;
l1 = i;}
else if(i>=l2){
l4 = l3;
l3 = l2;
l2 = i;}
else if(i>=l3){
l4 = l3;
l3 = i;}
else if(i>=l4)
l4 = i;
}
for(auto i:arr){
if(i<=s1){
s4 = s3;
s3 = s2;
s2 = s1;
s1 = i;}
else if(i<=s2){
s4 = s3;
s3 = s2;
s2 = i;}
else if(i<=s3){
s4 = s3;
s3 = i;}
else if(i<=s4)
s4 = i;
}
int minsum = s1 + s2 + s3 + s4;
int maxsum = l1 + l2 + l3 + l4;
cout << maxsum << " " << minsum << endl;
}
假设您可以使用标准库:
void miniMaxSum(const std::vector<int> & arr) {
std::array<int, 4> small_numbers;
std::partial_sort_copy(arr.begin(), arr.end(),
small_numbers.begin(), small_numbers.end(),
std::less<int>());
std::array<int, 4> large_numbers;
std::partial_sort_copy(arr.begin(), arr.end(),
large_numbers.begin(), large_numbers.end(),
std::greater<int>());
std::cout << std::accumulate(small_numbers.begin(), small_numbers.end(), 0)
<< " "
<< std::accumulate(large_numbers.begin(), large_numbers.end(), 0)
<< std::endl;
}
显示适用于 https://repl.it/repls/EntireTornBotany
使用 C++ Stl sort(array,array+n( 对数组进行排序,然后从开头或结尾中选择 n 个数字。将在大哦的nlogn完成
相关文章:
- 找到四个 10 的所有表达式
- 如何在 c++ 中存储具有值的四个参数的元组
- C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
- 如何实现四个 i8 元素组的高效_mm256_madd_epi8点积
- 如何将无符号的 int 值解释为四个字母的单词?
- 如何让变量随机输出四个单词之一
- 如何校准相机焦距,平移和旋转给定四个点
- 这C++ unordered_map怎么有四个值?我以为这是一个键值对
- 我想将四个字节合并为一个数字以进行串行传输
- QT将MainWindow拆分为四个小部件
- 如何将文本文件的各个部分导入到四个不同的字符串
- Curl - 发送数百个请求,但一次只能发送四个 - 编程
- 连接四个C 下降功能无法正常工作
- 连接四个成功的组合检查适用于大多数情况,但不适用于某些情况
- 使用C randint生成四个数字
- 使用Cublas SGEMV时,如何跳过Float4中的第四个元素
- 在数组中,查看第一个数组的最后四个元素是否与第二个数组的后四个元素匹配
- 用C++将一个字符数组中的四个元素读入另一个字符阵列
- 如果我们声明一个由四个元素组成的数组,这些元素可以存储值吗
- 为什么四个大于63000元素的本地数组会导致堆栈溢出