热门标签 | 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)


推荐阅读
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • 本文讨论了如何根据特定条件动态显示或隐藏文件上传控件中的默认文本(如“未选择文件”)。通过结合CSS和JavaScript,可以实现更灵活的用户界面。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
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社区 版权所有