当前位置: 首页 > 面试题库 >

给定一个随机排列的 0 和 1 数组,您需要将数组中的 0 和 1 分开

裴昊阳
2023-03-14
问题内容

给定一个随机排列的 0 和 1 数组,您需要将数组中的 0 和 1 分开。
例如:

arr[] = {0,1,0,0,1,1,1,0,1}
Array after separating odd and even numbers :
{0,0,0,0,1,1,1,1,1}

问题答案:

解决方案1:
计算数组中 0 的数量。假设我们得到 X 0
一旦我们得到计数,将 X 0 放入数组,并将 (nX) 1 放入数组的后半部分。
java代码:

public static int[] separate0s1sSolution1(int arr[])
 {
  int count=0;
  for (int i = 0; i < arr.length; i++) {
   if(arr[i]==0)
   {
    count++;
   }
  }
  for (int i = 0; i < count; i++) {
   arr[i]=0;
  }
  for (int i = count; i < arr.length; i++) {
   arr[i]=1;
  }
  return arr;
 }

时间复杂度:O(N)
解决方案2:
算法:

让我们说数组是 arr[]

  • 初始化两个索引变量,left=0 和 right=arr.length-1
  • 增加左变量直到得到 1
  • 递减右边的变量直到你得到 0
  • 如果 left < right,交换 arr[left]arr[right]
  • 最后,您会看到左侧为 0,右侧为 1。

java代码:

public static int[] separate0s1sSolution2(int arr[])
 {
  for (int i = 0; i < arr.length; i++) {
   int left=0;
   int right=arr.length-1;
   while(arr[left]==0)
   {
    left++;
   }
   while(arr[right]==1)
   {
    right--;
   }

   if(left<right)
   {
    int temp=arr[left];
    arr[left]=arr[right];
    arr[right]=temp;
   }
  }
  return arr;
 }

用于分隔数组中奇数和偶数的 Java 代码:

package org.arpit.java2blog;

public class Separate0s1sMain {

 public static void main(String[] args) {
  int arr[]={0,1,0,0,1,1,1,0,1};
  System.out.println("Original Array: ");
  for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i]+" ");
  }
  arr=separate0s1sSolution1(arr);
  System.out.println("n===========================");
  System.out.println("Solution 1");
  System.out.println("nArray after separating 0's and 1's : ");
  for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i]+" ");
  }
  System.out.println("n===========================");
  System.out.println("Solution 2");
  arr=separate0s1sSolution2(arr);
  System.out.println("nArray after separating 0's and 1's : ");
  for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i]+" ");
  } 
 }

 public static int[] separate0s1sSolution1(int arr[])
 {
  int count=0;
  for (int i = 0; i < arr.length; i++) {
   if(arr[i]==0)
   {
    count++;
   }
  }
  for (int i = 0; i < count; i++) {
   arr[i]=0;
  }
  for (int i = count; i < arr.length; i++) {
   arr[i]=1;
  }
  return arr;
 }
 public static int[] separate0s1sSolution2(int arr[])
 {
  for (int i = 0; i < arr.length; i++) {
   int left=0;
   int right=arr.length-1;
   while(arr[left]==0)
   {
    left++;
   }
   while(arr[right]==1)
   {
    right--;
   }

   if(left<right)
   {
    int temp=arr[left];
    arr[left]=arr[right];
    arr[right]=temp;
   }
  }
  return arr;
 }

}

当你运行上面的程序时,你会得到以下输出:

Original Array: 
0 1 0 0 1 1 1 0 1 
===========================
Solution 1

Array after separating 0's and 1's : 
0 0 0 0 1 1 1 1 1 
===========================
Solution 2

Array after separating 0's and 1's : 
0 0 0 0 1 1 1 1 1


 类似资料:
  • 我有一个像这样的麻木数组: 我不明白: : 因为我认为两者应该给出完全相同的结果?我的意思是后面的应该只代表第一个元素,对吗?那么,两者到底有什么区别?

  • 我想有一个随机列表,其中1的出现率为10%,其余项目为零。这个列表的长度是1000。我希望这些值以随机顺序排列,以便它们之间有一个可调整的最小距离。例如,如果我选择一个值3,列表将如下所示: 实现这一点最优雅的方法是什么? 编辑我被要求提供更多的信息并表现出一些努力。 这是一项研究,其中0表示一种刺激,1表示另一种刺激,我们希望刺激类型1之间有一个最小距离。 到目前为止,我通过以下方式实现了这一目

  • 我得到以下错误 警告:mysqli_error()只需要1个参数,给定0 问题出在代码的这一行: 整个代码是 包含的文件有以下一行

  • 我想通过在Python中给出一个介于0和1之间的种子来生成固定随机数列表。例如,l=[0.1,0.5,0.6,0.9,0.75]。我可以通过使用random.random()得到这个。但每次它都给出一个新的随机数列表。我想通过给一些种子来解决它。 我怎么能那么做。提前感谢!

  • 本文向大家介绍ActionScript 3 0到1之间的随机数,包括了ActionScript 3 0到1之间的随机数的使用技巧和注意事项,需要的朋友参考一下 示例 产生介于0(含)和1(不含)之间的均匀分布的随机数 输出示例: 0.22282187035307288 0.3948539895936847 0.9987191134132445

  • 需要帮助使用随机数1-10填充数组,而不使用0。-创建一个包含100个整数的数组。我尝试过;但这会抛出每个数字的计数。 我需要在作业中做什么: < li >用1到10之间的随机数填充数组。(不为零) < li >确定数组中所有数字的平均值。 < li >计算100个数字的数组中每个数字出现的次数。这样做的第二个数组的大小为10个整数,并根据您在100个整数的数组中找到的重复数递增数组的每个元素。