热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

寻找数组O(n)中两数组合的最小和值

由 O(n)中数组的数字组成的两个数的最小和原文:https://www . geeksforgeeks . org/二进制数的

由 O(n)中数组的数字组成的两个数的最小和

原文:https://www . geeksforgeeks . org/二进制数的最小和-由数组中的数字组成/

给定一个数字数组(值从 0 到 9),求由数组的数字组成的两个数字的最小可能和。给定数组的所有数字都必须用来构成这两个数字。
例:

输入: arr[] = {6,8,4,5,2,3}
输出: 604
246 + 358 = 604
输入: arr[] = {5,3,0,7,4}
输出: 82

方法:当最小的数字出现在最高有效位置,次小的数字出现在次高有效位置,以此类推时,将从数字集合中形成一个最小的数字……
想法是通过交替从数组中挑选数字来构建两个数字(假设按升序排序)。因此,第一个数字由数组中奇数位置的数字组成,第二个数字由数组中偶数位置的数字组成。最后,我们返回第一个和第二个数的和。为了降低时间复杂度,可以使用数字的频率数组将数组排序为 0(n),因为原始数组的每个元素都是一个数字,即最多可以有 10 个不同的元素。
以下是上述办法的实施:

C++

// C++ implementation of above approach
#include
using namespace std;
// Function to return the required minimum sum
int minSum(vector arr, int n)
{
    // Array to store the
    // frequency of each digit
    int MAX = 10;
    int *freq = new int[MAX];
    for (int i = 0; i         // Store count of every digit
        freq[arr[i]]++;
    }
    // Update arr[] such that it is
    // sorted in ascending
    int k = 0;
    for (int i = 0; i         // Adding elements in arr[]
        // in sorted order
        for (int j = 0; j             arr[k++] = i;
        }
    }
    int num1 = 0;
    int num2 = 0;
    // Generating numbers alternatively
    for (int i = 0; i         if (i % 2 == 0)
            num1 = num1 * MAX + arr[i];
        else
            num2 = num2 * MAX + arr[i];
    }
    // Return the minimum possible sum
    return num1 + num2;
}
// Driver code
int main(void)
{
    vectorarr = { 6, 8, 4, 5, 2, 3 };
    int n = arr.size();
    cout <}
// This code is contributed by ankush_953

Java 语言(一种计算机语言,尤用于创建网站)

// Java implementation of above approach
public class GFG {
    public static final int MAX = 10;
    // Function to return the required minimum sum
    static int minSum(int arr[], int n)
    {
        // Array to store the
        // frequency of each digit
        int freq[] = new int[MAX];
        for (int i = 0; i             // Store count of every digit
            freq[arr[i]]++;
        }
        // Update arr[] such that it is
        // sorted in ascending
        int k = 0;
        for (int i = 0; i             // Adding elements in arr[]
            // in sorted order
            for (int j = 0; j                 arr[k++] = i;
            }
        }
        int num1 = 0;
        int num2 = 0;
        // Generating numbers alternatively
        for (int i = 0; i             if (i % 2 == 0)
                num1 = num1 * MAX + arr[i];
            else
                num2 = num2 * MAX + arr[i];
        }
        // Return the minimum possible sum
        return num1 + num2;
    }
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 6, 8, 4, 5, 2, 3 };
        int n = arr.length;
        System.out.print(minSum(arr, n));
    }
}

Python 3

# Python implementation of above approach
# Function to return the required minimum sum
def minSum(arr, n):
    # Array to store the
    # frequency of each digit
    MAX = 10
    freq = [0]*MAX
    for i in range(n):
        # Store count of every digit
        freq[arr[i]] += 1
    # Update arr[] such that it is
    # sorted in ascending
    k = 0
    for i in range(MAX):
        # Adding elements in arr[]
        # in sorted order
        for j in range(0,freq[i]):
            arr[k] = i
            k += 1
    num1 = 0
    num2 = 0
    # Generating numbers alternatively
    for i in range(n):
        if i % 2 == 0:
            num1 = num1 * MAX + arr[i]
        else:
            num2 = num2 * MAX + arr[i]
    # Return the minimum possible sum
    return num1 + num2
# Driver code
arr = [ 6, 8, 4, 5, 2, 3 ]
n = len(arr);
print(minSum(arr, n))
#This code is contributed by ankush_953

C

// C# implementation of above approach
using System;
class GFG {
    public static int MAX = 10;
    // Function to return the required minimum sum
    static int minSum(int[] arr, int n)
    {
        // Array to store the
        // frequency of each digit
        int[] freq = new int[MAX];
        for (int i = 0; i             // Store count of every digit
            freq[arr[i]]++;
        }
        // Update arr[] such that it is
        // sorted in ascending
        int k = 0;
        for (int i = 0; i             // Adding elements in arr[]
            // in sorted order
            for (int j = 0; j                 arr[k++] = i;
            }
        }
        int num1 = 0;
        int num2 = 0;
        // Generating numbers alternatively
        for (int i = 0; i             if (i % 2 == 0)
                num1 = num1 * MAX + arr[i];
            else
                num2 = num2 * MAX + arr[i];
        }
        // Return the minimum possible sum
        return num1 + num2;
    }
    // Driver code
    static public void Main()
    {
        int[] arr = { 6, 8, 4, 5, 2, 3 };
        int n = arr.Length;
        Console.WriteLine(minSum(arr, n));
    }
}
// This code is contributed by jit_t.

java 描述语言


Output: 

604

时间复杂度: O(n)


推荐阅读
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 本文介绍了一种基于选择排序思想的高效排序方法——堆排序。通过使用堆数据结构,堆排序能够在每次查找最大元素时显著提高效率。文章详细描述了堆排序的工作原理,并提供了完整的C语言代码实现。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 本文详细介绍了如何在C#程序运行期间防止系统进入休眠模式以及显示器关闭,提供了具体的实现代码示例,并解释了其应用场景。这不仅有助于提高程序的稳定性,还能优化能源管理。适合需要处理长时间任务(如下载或批处理)的开发者参考。 ... [详细]
  • 本文探讨了Jsonapi-rb与ActiveModelSerializers (AMS)在性能上的差异,并分享了详细的基准测试结果。 ... [详细]
author-avatar
mobiledu2502917797
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有