java数组分离奇数和偶数_以最小的时间复杂度分离偶数和奇数

java数组分离奇数和偶数

Problem statement:

问题陈述:

Given an array of integers. Write a function to segregate the Even and Odd numbers. Put the even numbers first.

给定一个整数数组。 编写一个函数来分隔偶数和奇数 。 将偶数放在第一位。

Solution:

解:

Algorithm:

算法:

  1. Set two index variable, left = 0 and right = n-1 (n = array length)

    设置两个索引变量, left = 0和right = n-1 ( n =数组长度)

  2. Keep increasing the left index until any odd no is found.

    继续增加左索引,直到找到任何奇数。

  3. Keep decreasing the right index until any even no is found.

    继续减少正确的索引,直到找不到任何索引为止。

  4. If left < right, swap array[left] and array[right].

    如果left <right ,则交换array [left]和array [right] 。

Time complexity: O(n) (only one scan )

时间复杂度: O(n) (仅一次扫描)

Space complexity: O(1) (no additional space used)

空间复杂度: O(1) (不使用其他空间)

Comment: The input order can be changed in the output as we are swapping on local observation.

注释:当我们交换本地观测值时,可以在输出中更改输入顺序。

C ++实现以最小的时间复杂度分离偶数和奇数 (C++ implementation to Segregate even and odd numbers in minimum time complexity)

#include <bits/stdc++.h>
using namespace std;

void print(int* a,int n){
	for(int i=0;i<n;i++)
		cout<<a[i]<<" ";
	cout<<endl;
}

void swap(int* a,int* b){
	int temp;
	temp=*a;
	*a=*b;
	*b=temp;
}

void separate(int* a, int n){
	int left=0,right=n-1;
	while(left<right){
		// increment left until any odd no is found 
		while(a[left]%2==0 && left<right) 
			left++;
		// increment right until any even no is found
		while(a[right]%2==1 && left<right) 
			right--;
		if(left<right){
			//swap array[left] & array[left] using pointer to reference
			swap(&a[left],&a[right]); 
			left++;
			right--;
		}
	}
}	

int main(){
	int n;
	// enter array length
	cout<<"enter no of elements\n";
	cin>>n;
	int* a=(int*)(malloc(sizeof(int)*n));
	//fill the array
	cout<<"enter elements...\n";
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	
	cout<<"array before segregating...\n";
	print(a,n);
	cout<<"array after segregating...\n";
	separate(a,n);
	print(a,n);

	return 0;	
}

Output

输出量

enter no of elements 
8
enter elements... 
11 
12 
13 
67 
66 
45 
34 
38 
array before segregating...
11 12 13 67 66 45 34 38
array after segregating...
38 12 34 66 67 45 13 11 


翻译自: https://www.includehelp.com/algorithms/segregate-even-and-odd-numbers-in-minimum-time-complexity.aspx

java数组分离奇数和偶数

### 回答1: 可以使用全局变量来编写一个函数,统计数组中奇数偶数的个数。具体实现如下: 1. 定义两个全局变量,odd_count和even_count,分别用于记录数组中奇数偶数的个数,初始值都为0。 2. 编写一个函数,接受一个整型数组作为参数,遍历数组中的每个元素,判断其是否为奇数偶数,如果是奇数,则将odd_count加1,如果是偶数,则将even_count加1。 3. 函数执行完毕后,返回一个包含奇数偶数个数的元组,可以使用Python中的元组类型来实现。 下面是具体的代码实现: ```python # 定义全局变量 odd_count = 0 even_count = 0 # 统计奇数偶数的个数 def count_odd_even(arr): global odd_count, even_count for num in arr: if num % 2 == 0: even_count += 1 else: odd_count += 1 return (odd_count, even_count) # 测试代码 arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] result = count_odd_even(arr) print("奇数个数:", result[0]) print("偶数个数:", result[1]) ``` 运行结果如下: ``` 奇数个数: 5 偶数个数: 4 ``` 注意,在函数内部使用全局变量时,需要使用global关键字声明,否则Python会将其视为局部变量。此外,全局变量的使用应该尽量避免,因为它会增加代码的复杂度和不可预测性。 ### 回答2: 编写一个函数统计数组中奇数偶数的个数,需要获取数组元素,判断元素是否为奇数偶数,然后统计奇数偶数的个数,最后返回结果。 全局变量可以在函数内部和外部都使用,因此可以定义两个全局变量,分别用于统计奇数偶数的个数,然后在函数内部进行操作。具体步骤如下: 1.定义全局变量 使用全局变量需要在函数外部先定义变量,比如: int oddCount = 0; //奇数的个数 int evenCount = 0; //偶数的个数 2.编写统计函数 编写一个函数,用于统计数组中奇数偶数的个数,函数需要传递一个整型数组数组长度作为参数。其中,函数内部使用循环遍历数组,判断数组元素是奇数还是偶数,并累加计数器。具体代码如下: void count(int arr[], int len){ for(int i=0;i<len;i++){ if(arr[i]%2 == 1){ //判断奇数 oddCount++; }else{ //偶数 evenCount++; } } } 3.调用函数并输出结果 在主函数内部调用统计函数,并输出奇数偶数的个数。具体代码如下: int main(){ int arr[] = {1,2,3,4,5,6,7,8,9}; //测试数组 int len = sizeof(arr)/sizeof(arr[0]); //获取数组长度 count(arr,len); //调用统计函数 cout<<"奇数的个数:"<<oddCount<<endl; //输出奇数的个数 cout<<"偶数的个数:"<<evenCount<<endl; //输出偶数的个数 return 0; } 4.完整代码 下面是完整的代码: #include<iostream> using namespace std; int oddCount = 0; //奇数的个数 int evenCount = 0; //偶数的个数 void count(int arr[], int len){ for(int i=0;i<len;i++){ if(arr[i]%2 == 1){ //判断奇数 oddCount++; }else{ //偶数 evenCount++; } } } int main(){ int arr[] = {1,2,3,4,5,6,7,8,9}; //测试数组 int len = sizeof(arr)/sizeof(arr[0]); //获取数组长度 count(arr,len); //调用统计函数 cout<<"奇数的个数:"<<oddCount<<endl; //输出奇数的个数 cout<<"偶数的个数:"<<evenCount<<endl; //输出偶数的个数 return 0; } ### 回答3: 在编写统计数组中奇数偶数的个数的函数之前,首先需要了解全局变量的概念和用法。全局变量是指在程序中所有函数都可以使用的变量,它的生命周期与整个程序的运行时间相同。全局变量定义在函数外,在函数内部也可以使用,但需要使用关键字“extern”进行声明。 利用全局变量编写函数统计数组中奇数偶数的个数可以如下实现: ```C++ #include <stdio.h> int even = 0; // 全局变量:偶数个数 int odd = 0; // 全局变量:奇数个数 void Count(int* arr, int len) { for (int i = 0; i < len; i++) { if (arr[i] % 2 == 0) { even++; // 统计偶数个数 } else { odd++; // 统计奇数个数 } } } int main() { int arr[] = {1, 2, 3, 4, 5, 6}; int len = sizeof(arr) / sizeof(arr[0]); Count(arr, len); printf("偶数个数:%d\n", even); printf("奇数个数:%d\n", odd); return 0; } ``` 在上述代码中,定义了全局变量“even”和“odd”分别表示偶数个数和奇数个数。函数“Count”是统计数组中奇数偶数个数的函数,内部使用循环遍历数组中每个元素,如果元素能被2整除,则计数变量“even”加1,否则计数变量“odd”加1。在main函数中,调用“Count”函数统计数组中奇数偶数的个数,最后输出结果。 需要注意的是,全局变量的使用需要慎重,尽量避免在多个函数中修改同一个全局变量,防止程序的可维护性降低。因此,在实际开发中,除非有必要,尽量使用局部变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值