entrevista programador de Ouro - perguntas da entrevista e troca 16.21 (conjunto de hash)

1. Tópico

Dadas duas matrizes de números inteiros, por favor troca de um par de valores (tendo um valor em cada matriz), de modo que os dois são iguais, e todos os elementos da matriz.

Devolve uma matriz, o primeiro elemento é o primeiro elemento da matriz a ser trocado, o segundo elemento é o elemento da segunda matriz para ser trocado.
Se houver várias respostas, qualquer dos quais pode retornar. Sem que satisfaz a condição de, devolve uma matriz vazia.

示例:
输入: array1 = [4, 1, 2, 1, 1, 2], array2 = [3, 6, 3, 3]
输出: [1, 3]

示例:
输入: array1 = [1, 2, 3], array2 = [4, 5, 6]
输出: []

提示:
1 <= array1.length, array2.length <= 100000

Fonte: estadia botão (LeetCode)
link: https: //leetcode-cn.com/problems/sum-swap-lcci
protegidas por copyright dedução de todas as redes. reimpressão comercial entre em contato com a reimpressão autorizado oficial, não-comercial por favor, indicar a fonte.

2. Resolução de Problemas

  • S 1 - uma + b = S 2 b + a a ( S 1 S 2 ) / 2 = b S1-a + b = S2-b + a \ Rightarrow um - (S1-S2) / 2 = b
class Solution {
public:
    vector<int> findSwapValues(vector<int>& array1, vector<int>& array2) {
    	int s1 = 0, s2 = 0, i;
    	unordered_set<int> set;
    	for(i = 0; i < array1.size(); ++i)
    		s1 += array1[i];
    	for(i = 0; i < array2.size(); ++i)
    	{
    		s2 += array2[i];
    		set.insert(array2[i]);
    	}
    	if(abs(s1-s2)%2)
    		return {};
    	int t = (s1-s2)>>1;
    	for(i = 0; i < array1.size(); ++i)
    	{
    		if(set.count(array1[i]-t))
    			return {array1[i], array1[i]-t};
    	}
    	return {};
    }
};

196 ms 33 MB

Publicado 804 artigos originais · ganhou elogios 1517 · Vistas 370.000 +

Acho que você gosta

Origin blog.csdn.net/qq_21201267/article/details/105302948
Recomendado
Clasificación