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

通过交换位生成元素最大化的数组

通过交换位生成元素最大化的数组原文:https://www.

通过交换位生成元素最大化的数组

原文:https://www . geeksforgeeks . org/generate-a-array-as-with-elements-通过交换位最大化/

给定一个数组 arr[] ,任务是生成一个修改后的数组,这样它的所有元素都可以通过交换位来最大化。
例:

输入: arr[] = {10,15}
输出: 12,15
解释:
二进制表示(10)10=(1010)2。交换第二位和第三位,得到二进制表示为(1100)2=(12)10
对于 15,它的二进制表示为 1111,不能进一步改变得到更大的值。
输入: arr[] = {8,15,9,10,14}
输出: 8,15,12,12,14

进场:
按照以下步骤解决问题:


  • 计算每个数组元素中已设置和未设置的位数。

  • 将所有设置的位向左(MSB)移动,将所有未设置的位向右(LSB)移动,以最大化数组元素。

  • 如果设置位或未设置位的计数等于数组元素的位数,则该元素不能更改(例如(7) 10 = (111) 2

  • 打印数组中最大化的元素

以下是上述方法的实现:

C++

// C++ implementation to
// find maximum sequence by
// swapping bits
#include
using namespace std;
// Function to generate the maximized
// array elements
void maximizedArray(
    int arr[], int N)
{
    int num, i = 0;
    // Traverse the array
    while (N--) {
        num = arr[i];
        int One= 0;
        int zero = 0;
        // Iterate to count set and
        // unset bits
        while (num) {
            // Count of unset bits
            if (num % 2 == 0) {
                zero++;
            }
            else {
                // Count of set bits
                one++;
            }
            // Bitwise right shift
            num = num >> 1;
        }
        for (int j = zero; j <(one + zero);
             j++) {
            // Shifting all 1's to MSB
            // and 0's to LSB
            num += (1 <        }
        cout <        i++;
        if (N > 0)
            cout <<", ";
    }
}
// Driver Code
int main()
{
    int arr[] = { 8, 15, 9, 10, 14 };
    int N = sizeof(arr) / sizeof(arr[0]);
    maximizedArray(
        arr, N);
    return 0;
}

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

// Java implementation to find
// maximum sequence by swapping bits
class GFG{
// Function to generate the maximized
// array elements
public static void maximizedArray(int arr[],
                                  int N)
{
    int num, i = 0;
    // Traverse the array
    for(int l = N; l > 0; l--)
    {
       num = arr[i];
       int One= 0;
       int zero = 0;
       // Iterate to count set and
       // unset bits
       while (num != 0)
       {
           // Count of unset bits
           if (num % 2 == 0)
           {
               zero++;
           }
           else
           {
               // Count of set bits
               one++;
           }
           // Bitwise right shift
           num = num >> 1;
       }
       for(int j = zero; j <(one + zero); j++)
       {
          // Shifting all 1's to MSB
          // and 0's to LSB
          num += (1 <       }
       System.out.print(num);
       i++;
       if (N > 0)
           System.out.print(", ");
    }
}
// Driver Code
public static void main(String args[])
{
    int arr[] = { 8, 15, 9, 10, 14 };
    int N = arr.length;
    maximizedArray(arr, N);
}
}
// This code is contributed by SoumikMondal

Python 3

# Python3 implementation to find
# maximum sequence by swapping bits
# Function to generate the maximized
# array elements
def maximizedArray(arr, N):
    i = 0
    # Traverse the array
    while (N > 0):
        num = arr[i]
        One= 0
        zero = 0
        # Iterate to count set and
        # unset bits
        while (num):
            # Count of unset bits
            if (num % 2 == 0):
                zero += 1
            else:
                # Count of set bits
                one += 1
            # Bitwise right shift
            num = num >> 1
        for j in range(zero, (one + zero)):
            # Shifting all 1's to MSB
            # and 0's to LSB
            num += (1 <        print(num, end = "")
        i += 1
        if (N > 0):
            print(", ", end = "")
        N -= 1
# Driver Code
if __name__ == "__main__":
    arr = [ 8, 15, 9, 10, 14 ]
    N = len(arr)
    maximizedArray(arr, N)
# This code is contributed by chitranayal

C

// C# implementation to find
// maximum sequence by swapping bits
using System;
class GFG{
// Function to generate the maximized
// array elements
public static void maximizedArray(int []arr,
                                  int N)
{
    int num, i = 0;
    // Traverse the array
    for(int l = N; l > 0; l--)
    {
        num = arr[i];
        int One= 0;
        int zero = 0;
        // Iterate to count set and
        // unset bits
        while (num != 0)
        {
            // Count of unset bits
            if (num % 2 == 0)
            {
                zero++;
            }
            else
            {
                // Count of set bits
                one++;
            }
            // Bitwise right shift
            num = num >> 1;
        }
        for(int j = zero; j <(one + zero); j++)
        {
            // Shifting all 1's to MSB
            // and 0's to LSB
            num += (1 <        }
        Console.Write(num);
        i++;
        if (N > 0)
            Console.Write(", ");
    }
}
// Driver Code
public static void Main(String []args)
{
    int []arr = { 8, 15, 9, 10, 14 };
    int N = arr.Length;
    maximizedArray(arr, N);
}
}
// This code is contributed by sapnasingh4991

java 描述语言


Output: 

8, 15, 12, 12, 14

时间复杂度:O(Nlog2N)
辅助空间: O(1)


推荐阅读
  • Java的核心库提供了大量的现成的类供我们使用。本节我们介绍几个常用的工具类。Math顾名思义,Math类就是用来进行数学计算的,它提供了大量的静态 ... [详细]
  • PIMPL 是 C++ 中的一个编程技巧,意思为指向实现的指针。具体操作是把类的实现细节放到一个单独的类中,并用一个指针进行访问 ... [详细]
  • 找出字符串中重复字符
    2019独角兽企业重金招聘Python工程师标准packagejavaBasic;importjava.util.HashMap;importjava.util.Map; ... [详细]
  • 编程语言是从哪蹦出来的——大型伦理寻根现场
    Hello,我是Alex007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫Alex的人太多了,再加上每天007的生活,Alex007就诞生了。聊一聊编程到底是啥,怎 ... [详细]
  • 1.背景java.util.concurrent.atomic这个包是非常实用,解决了我们以前自己写一个同步方法来实现类似于自增长字段的问题。在Java语言中,增量操作符(++)不是原子的, ... [详细]
  • 普通调用https:www.cnblogs.comYogurshinep3913073.htmlhttps:zhidao.baidu.comquestion531286375.h ... [详细]
  • 最近自己做一个工具最后涉及到一个存储成bmp位图的形式,由于这部分并不是整个project的重点我就从网上找了例子改了改,但是目前的问题是有很多时候都是存储的bmp全黑,我也并不知道是怎么回事。 ... [详细]
  • DFS基本概念步骤优缺点典型例题递推基本概念直接或者间接调用自身的算法称为递归算法一般数据n ... [详细]
  • 题目链接:杭电多校7-VirtualJudgevjudge上题目显示的有问题,我下面附上官方题目:样例输入:32201 ... [详细]
  • 我正在使用数组列表通过构建一个交互式菜单供用户选择来存储来自用户输入的值。到目前为止,我的两个选择是为用户提供向列表输入数据和读取列表的全部内容。到目前为止,我创建的代码由两个类组成。 ... [详细]
  • 题意给出一个长度为n的序列,有一些位置可以放任意的数,问最长上升序列的长度。n ... [详细]
  • 如何用js 实现依赖注入的思想,后端框架思想搬到前端来
    如何用js实现依赖注入的思想,后端框架思想搬到前端来-大家在做些页面的时候,很多都是用ajax实现的,在显示的时候有很多表单提交的add或者update操作,显然这样很烦,突然想到 ... [详细]
  • 在这一期的SendMessage函数应用中,我将向大家介绍如何利用消息函数来扩展树型列表(TreeView)控件的功能相信对于树型列表控件大家十分的熟悉, ... [详细]
  • 下面是一个用openssl实现获取https网页内容的demo,整个流程比较简单,主要封装的API如下staticinthttps_init(http ... [详细]
  • Flex中使用filter过滤数据 ... [详细]
author-avatar
上善若水0716812
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有