c - 求给定数组中除 1 个整数之外的所有整数的最大和最小总和

标签 c data-structures

今天我来这里还有另一个问题需要解决。

这是 HackerRank 作业中的一项,https://www.hackerrank.com/challenges/mini-max-sum/problem 因此,总体思路是从给定数组中找到 4/5 整数的最小和和最大和;

为了解决这个问题,我想出了使用排序算法首先按升序对数组进行排序,然后我将添加除最后一个之外的所有整数以找到最小和,并将除第一个之外的所有整数相加找到最大和的一个。

void miniMaxSum(int arr_count, int* arr) {

    int i,j,min,temp;
    for(i=0;i<arr_count-1;i++)
    {
        min=i;
        for(j=i+1;j<arr_count;j++)
        {
            if(arr[j]<arr[min])
                min=j;
        }
        temp=arr[i];
        arr[i]=arr[min];
        arr[min]=temp;
    }

    int minsum=0,maxsum=0;
    for(i=0;i<arr_count-1;i++)
        minsum+=arr[i];
    for(i=1;i<arr_count;i++)
        maxsum+=arr[i];

    printf("%d %d",minsum,maxsum);
}

以下代码适用于一些测试用例,但不适用于所有测试用例。任何帮助将不胜感激。

最佳答案

您无需对数组进行排序即可获得结果。 您所需要的只是知道数组的最大值和最小值是多少。 只需使用一个循环即可。

void miniMaxSum(int arr_count, int* arr) {
    int i,min, max;
    min = max = arr[0];
    for(i=1;i<arr_count;i++)
    {
        if(min > arr[i]) min = arr[i];
        else if(max < arr[i]) max = arr[i];
    }

    int sum = 0;
    for(i=0;i<arr_count;i++)
        sum+=arr[i];

    printf("%d %d",sum-max,sum-min);
}

HTH

关于c - 求给定数组中除 1 个整数之外的所有整数的最大和最小总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60245666/

相关文章:

c - 此 C 代码中的错误在哪里,如何消除警告?

c - 无法使用 FFI 将结构内部的字符串数组传递给 C 函数

c - 通过开罗表面绘画时清除 X 窗口的正确方法是什么

c++ - 惰性传播 - 可怕的 spoj

Java - 什么数据结构为预加载字符串数组和检查字符串是否存在提供最快的性能?

java - 使用数据结构在 O(n) 中解决这个问题

c - 子域和套接字

c - 如何删除 CLOSE_WAIT 套接字连接?

algorithm - 是否总是可以通过树旋转将一个BST转换为另一个BST?

data-structures - OCaml:为文本冒险游戏设计数据类型