Intersección de dos matrices II Medio

Algoritmo veinte días

el undécimo día

La intersección de dos matrices II
le proporciona dos matrices de números enteros nums1 y nums2; devuelva la intersección de las dos matrices como una matriz. El número de apariciones de cada elemento en el resultado devuelto debe ser coherente con el número de apariciones del elemento en ambas matrices (si el número de apariciones es inconsistente, considere tomar un valor menor). El orden de los resultados de salida se puede ignorar.

Ejemplo 1:

Entrada: números1 = [1,2,2,1], números2 = [2,2]
Salida: [2,2]

Ejemplo 2:

Entrada: números1 = [4,9,5], números2 = [9,4,9,8,4]
Salida: [4,9]

pista:

1 <= números1.longitud, números2.longitud <= 1000
0 <= números1[i],
números2[i] <=1000

Avanzado:

¿Qué pasa si la matriz dada ya está ordenada? ¿Cómo optimizarías tu algoritmo?
¿Qué método es mejor si nums1 es menor que nums2?
¿Qué haces si los elementos de nums2 están almacenados en el disco, la memoria es limitada y no puedes cargar todos los elementos en la memoria a la vez?

Autor: LeetCode
Enlace: https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2y0c2/

#include<bits/stdc++.h>
using namespace std; 
//法一:利用map计数
 /*vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
	int map[1001]={0};//所有可能的数
	vector<int> temp;
	for(int i=0;i<nums1.size();i++)
		map[nums1[i]]++;
	for(int i=0;i<nums2.size();i++)
		if(map[nums2[i]])//遍历有重复的就push进temp;
		{
			map[nums2[i]]--;
			temp.push_back(i);
		}
	return temp;
}*/

vector<int> intersect(vector<int>& nums1, vector<int>& nums2)
{
    
    
	sort(nums1.begin(),nums1.end());
	sort(nums2.begin(),nums2.end());
	//排序
	int i=0,j=0;
	vector<int> temp;
	while(i<nums1.size()&&j<nums2.size())
	{
    
    
		if(nums1[i]<nums2[j])
			i++;
		else if(nums1[i]>nums2[j])
				j++;
		else
		{
    
    
			temp.push_back(nums1[i]);
			i++;
			j++;
		}
			
	}
	return temp;
	
}

int main()
{
    
    
	vector<int> temp1={
    
    1,1};
	vector<int> temp2={
    
    1,2};
	vector<int> temp3=intersect(temp1,temp2);
	for(auto &o:temp3)
		cout<<o<<" ";
}

Para nums2 que no pueden entrar todos a la vez, solo puedo pensar en usar el método n^2 para comparar uno por uno.

Supongo que te gusta

Origin blog.csdn.net/BeiWoFW/article/details/124308119
Recomendado
Clasificación