Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Найти пересечения двух массивов. Вернуть массив уникальных значений
- */
- var arr1 = [1, 2, 3, 2, 0];
- var arr2 = [5, 1, 2, 7, 3, 2];
- // хэш таблица
- // T — O(n + m)
- // S — O(n)
- // В данном примере можно уменьшить использование памяти,
- /*
- Вместо массива result возвращать массив nums2
- for (let i = 0; i < nums2.length; i++) {
- let num = nums2[i];
- if (num in hash && hash[num] > 0) {
- hash[num]--;
- } else {
- nums2.splice(i, 1);
- }
- }
- return nums2;
- */
- function intersection(nums1, nums2) {
- let result = [];
- let hash = {};
- for (let num of nums1) {
- hash[num] = (hash[num] || 0) + 1;
- }
- for (let num of nums2) {
- if (num in hash && hash[num] > 0) {
- result.push(num);
- hash[num]--;
- }
- }
- return result;
- }
- // Два указателя (если на входе отсортированные массивы это решение лучше)
- // T — O(n + m)
- // S — O(1)
- function intersection(nums1, nums2) {
- let m = nums1.length;
- let n = nums2.length;
- let i = 0;
- let j = 0;
- let result = [];
- while (i < m && j < n) {
- if (nums1[i] === nums2[j]) {
- result.push(nums1[i]);
- i++;
- j++;
- } else if (nums1[i] < nums2[j]) {
- i++;
- } else {
- j++;
- }
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement