Problema informático de la Universidad de Donghua: elimine el mismo elemento en la matriz

Problema informático de la Universidad de Donghua: elimine el mismo elemento en la matriz

Descripción del tema:
en una matriz ordenada creciente, hay elementos con el mismo valor. La función del programa es eliminar elementos con el mismo valor, de modo que no haya elementos duplicados en la matriz. Por ejemplo (7, 10, 10, 21, 30, 42, 42, 42, 51) se convierte en (7, 10, 21, 30, 42, 51).

Método 1:
Primero determine que la matriz está aumentando y ordenada. Entonces solo necesita comparar dos elementos adyacentes. La idea de la ordenación por inserción directa se puede utilizar aquí: si existe un elemento insertado en la matriz, no se inserta. Usando la idea de la ordenación directa, su complejidad temporal es o (n ^ 2) y la complejidad espacial es o (1).

#include<iostream>
using namespace std;
void sort(int num[], int n) {
	int temp;
	for (int i = 0;i < n - 1;i++) {
		for (int j = 0;j < n - i - 1;j++) {
			if (num[j] > num[j + 1]) {
				temp = num[j];
				num[j] = num[j + 1];
				num[j + 1] = temp;
			}
		}
	}
}
void deletSame(int num[], int n) {
	sort(num, n);
	int i, j;
	for (i = 0, j = 1;j < n;j++) {
		if (num[i] != num[j]) {
			num[++i] = num[j];
		}
	}
	for (int k = 0;k < (i + 1);k++)
		cout << num[k] << " ";
}
int main() {
	int n;
	cout << "输入数字个数:";
	cin >> n;
	int* num = new int[n];
	cout << "输入数组:";
	for (int i = 0;i < n;i++)
		cin >> num[i];
	deletSame(num, n);
	return 0;
}

Ejecución de resultados de la prueba:
Inserte la descripción de la imagen aquí
Método 2:
Otra forma de pensar es diseñar una matriz auxiliar, diseñar dos punteros i y j para señalar la matriz original y la matriz auxiliar, y comparar los valores en la matriz original y la matriz auxiliar, si son iguales, entonces i ++, de lo contrario inserte los datos en la matriz auxiliar, los dos punteros retroceden al mismo tiempo hasta que se atraviesa la matriz original. Usando el método de agregar una matriz auxiliar, la complejidad del tiempo es o (n) y la complejidad del espacio es o (n).

#include<iostream>
using namespace std;
void sort(int num[], int n) {
	int temp;
	for (int i = 0;i < n - 1;i++) {
		for (int j = 0;j < n - i - 1;j++) {
			if (num[j] > num[j + 1]) {
				temp = num[j];
				num[j] = num[j + 1];
				num[j + 1] = temp;
			}
		}
	}
}
void deletSame(int num[], int n) {
	sort(num, n);
	int i, j;
	int* fuzhu = new int[n];
	fuzhu[0] = num[0];
	for (i = 1, j = 0;i < n;i++) {
		if (num[i] != fuzhu[j]) {
			j++;
			fuzhu[j] = num[i];
		}
	}
	for (int k = 0;k <= j;k++)
		cout << fuzhu[k] << " ";
}
int main() {
	int n;
	cout << "输入数字个数:";
	cin >> n;
	int* num = new int[n];
	cout << "输入数组:";
	for (int i = 0;i < n;i++)
		cin >> num[i];
	deletSame(num, n);
	return 0;
}

Resultados de la prueba en ejecución:
Inserte la descripción de la imagen aquí

54 artículos originales publicados · Me gustaron 54 · Visitas 3073

Supongo que te gusta

Origin blog.csdn.net/weixin_45295612/article/details/105407735
Recomendado
Clasificación