重新排列一个数组,使得arr变为arr],并且只使用O(1)额外的空间,使用C++实现
我们得到一个正整数类型数组,比方说,任意给定大小的 arr[],这样数组中的元素值应大于 0 但小于数组的大小。任务是重新排列 一个数组,仅在给定的 O(1) 空间内将 arr[i] 变为 arr[arr[i]] 并打印最终结果。
让我们看看这种情况的各种输入输出场景−
输入− int arr[] = {0 3 2 1 5 4 }
输出− 排列前的数组: 0 3 2 1 5 4 重新排列数组,使 arr[i] 变为 arr[arr[i]],并具有 O(1) 额外空间: 0 1 2 3 4 5
解释− 我们给定一个大小为 6 的整数数组,并且数组中的所有元素值小于 6。现在,我们将重新排列数组,即 arr[arr[0] 为 0,arr[arr[1]] 为 1,arr[arr [2]] 为 2,arr[arr[3]] 为 3,arr[arr[4]] 为 4,arr[arr[5]] 为 5。因此,重新排列后的最终数组为 0 1 2 3 4 5.
输入− int arr[] = {1, 0}
输出− 排列前的数组:1 0 重新排列数组,使 arr[i] 变为 arr[arr[i]],其中 O(1) 额外空间为: 0 1
解释 - 我们得到一个整数大小为 2 且数组中所有元素值小于 2 的数组。现在,我们将重新排列该数组,即 arr[arr[0] 为 1,arr[arr[1]] 为 0。因此,重新排列后的最终数组是 0 1。
输入− int arr[] = {1, 0, 2, 3}
输出−排列前的数组:1 0 2 3 重新排列数组,使 arr[i] 变为 arr[arr[i]],并具有 O(1) 额外空间: 0 1 2 3
解释 - 我们给出大小为 4 的整数数组,并且数组中的所有元素值小于 4。现在,我们将重新排列数组,即 arr[arr[0] 为 0,arr[arr[1]] 为 1,arr[arr[2] ]] 为 2,arr[arr[3]] 为 3。因此,重新排列后的最终数组为 0 1 2 3。
下面程序中使用的方法如下
输入一个整型元素数组,计算数组大小
打印排列前的数组,调用函数Rearrangement (arr, size)
-
函数内部重排(arr, size)
开始循环FOR from i 到 0 直到 i 小于大小。在循环内部,将 temp 设置为 arr[arr[i]] % size 和 arr[i] += temp * size。
开始循环 FOR 从 i 到 0 直到 i小于尺寸。在循环内,设置 arr[i] = arr[i] / size
打印结果。
示例
#include <bits/stdc++.h> using namespace std; void Rearrangement(int arr[], int size){ for(int i=0; i < size; i++){ int temp = arr[arr[i]] % size; arr[i] += temp * size; } for(int i = 0; i < size; i++){ arr[i] = arr[i] / size; } } int main(){ //input an array int arr[] = {0, 3, 2, 1, 5, 4}; int size = sizeof(arr) / sizeof(arr[0]); //print the original Array cout<<"Array before Arrangement: "; for (int i = 0; i < size; i++){ cout << arr[i] << " "; } //calling the function to rearrange the array Rearrangement(arr, size); //print the array after rearranging the values cout<<"\nRearrangement of an array so that arr[i] becomes arr[arr[i]] with O(1) extra space is: "; for(int i = 0; i < size; i++){ cout<< arr[i] << " "; } return 0; }
输出
如果我们运行上面的代码,它将生成以下输出
Array before Arrangement: 0 3 2 1 5 4 Rearrangement of an array so that arr[i] becomes arr[arr[i]] with O(1) extra space is: 0 1 2 3 4 5
以上是重新排列一个数组,使得arr变为arr],并且只使用O(1)额外的空间,使用C++实现的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

问题使用C程序解释数组的后置递增和前置递增的概念。解决方案递增运算符(++)-用于将变量的值增加1有两种类型的递增运算符-前置递增和后置递增。在前置递增中,递增运算符放在操作数之前,值先递增,然后进行操作。eg:z=++a;a=a+1z=a自增运算符在后增运算中放置在操作数之后,操作完成后值会增加。eg:z=a++;z=aa=a+1让我们考虑一个例子,通过使用前增量和后增量来访问内存位置中的特定元素。声明一个大小为5的数组并进行编译时初始化。之后尝试将前增量值赋给变量'a'。a=++arr[1]

Java通过利用数组和泛型来实现堆栈。这创建了一个多功能且可重用的数据结构,该结构按照后进先出(LIFO)的原则运行。按照这个原则,元素是从顶部添加和删除的。通过利用数组作为基础,它确保了高效的内存分配和访问。此外,通过合并泛型,堆栈能够容纳不同类型的元素,从而增强其多功能性。该实现涉及包含泛型类型参数的Stack类的定义。它包括基本方法,如push()、pop()、peek()和isEmpty()。边缘情况的处理(例如堆栈溢出和下溢)对于确保无缝功能也至关重要。此实现使开发人员能够创建能够容纳

Java中向数组中添加新元素是一种常见的操作,可以使用多种方法实现。本文将介绍几种常见的添加元素到数组的方法,并提供相应的代码示例。一、使用新数组一种常见的方法是创建一个新的数组,将原数组的元素复制到新数组中,并在新数组的末尾添加新元素。具体步骤如下:创建一个新的数组,大小比原数组大1。这是因为要添加一个新元素。将原数组的元素复制到新数组中。在新数组的末尾添

PHP中数组(array)的基本操作和使用方法一、概述数组是PHP中一种非常重要的数据类型,它可以用于存储多个值,并且可以通过索引或者键来访问这些值。数组在PHP中拥有丰富的操作和使用方法,本文将详细介绍PHP中数组的基本操作和使用方法。二、创建数组在PHP中,可以通过两种方式来创建数组:可数数组和关联数组。创建可数数组可数数组是按顺序排列并以数字索引的数组
![重新排列一个数组,使得arr变为arr],并且只使用O(1)额外的空间,使用C++实现](https://img.php.cn/upload/article/000/000/164/169319478769496.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
我们得到一个正整数类型数组,比方说,任意给定大小的arr[],这样数组中的元素值应大于0但小于数组的大小。任务是重新排列一个数组,仅在给定的O(1)空间内将arr[i]变为arr[arr[i]]并打印最终结果。让我们看看这种情况的各种输入输出场景−输入−intarr[]={032154}输出−排列前的数组:032154重新排列数组,使arr[i]变为arr[arr[i]],并具有O(1)额外空间:012345解释−我们给定一个大小为6的整数数组,并且数组中的所有元素值小于6。现在,我们将重新排列

数组是相同类型元素的顺序集合。数组用于存储数据的集合,但将数组视为相同类型的变量的集合通常更有用。而不是声明单个变量,例如number0、number1、...和number99,您可以声明一个数组变量(例如数字),并使用numbers[0]、numbers[1]和...、numbers[99]来表示各个变量。数组中的特定元素通过索引访问。所有数组都由连续的内存位置组成。最低地址对应于第一个元素,最高地址对应于最后一个元素。声明数组声明数组需要指定元素的类型以及所需元素的数量。一个数组如下-ty

我们得到一个包含正数和负数的整数类型数组,比方说,任意给定大小的arr[]。任务是以这样的方式重新排列数组,使得偶数位置或索引处的所有元素都应大于奇数位置或索引处的元素,并且打印结果。让我们看看这个的各种输入输出场景-输入−intarr[]={2,1,4,3,6,5,8,7}输出−排列前的数组:21436587重新排列数组,使得偶数位置大于奇数位置:12345678解释−我们得到一个大小为8的整数数组,其中包含正数和负面因素。现在,我们将数组重新排列,使得偶数位置的所有元素都大于奇数位置的元素,

深入解析JS内置对象的功能与特点JavaScript是一门基于对象的编程语言,它提供了许多内置对象,这些对象拥有各种丰富的功能和特点。在本文中,我们将深入解析一些常用的内置对象,并给出相应的代码示例。Math对象Math对象提供了一些基本的数学运算方法,如求幂、开方、对数等。以下是一些常用的Math对象的方法示例://求绝对值Math.abs(-10
