Ввод: nums1 = [1,2,2,3,3,3,3,4], nums2 = [0,0,0,3]
Вывод: [1,2,2,4]
Объяснение: удаляем все тройки из nums1 даже если в nums2 встречается только 1 раз
Ограничения:
len(nums1) >= 0
len(nums2) >= 0
using System.Collections.Generic;
public class Solution {
public static List<int> FindDifference(List<int> nums1, List<int> nums2) {
List<int> result = new List<int>();
int p1 = 0;
int p2 = 0;
while (p1 < nums1.Count) {
// если nums2 закончился — все оставшиеся из nums1 идут в результат
if (p2 >= nums2.Count) {
result.Add(nums1[p1]);
p1++;
continue;
}
// если текущий элемент nums1 меньше — он есть только в nums1
if (nums1[p1] < nums2[p2]) {
result.Add(nums1[p1]);
p1++;
} else if (nums1[p1] > nums2[p2]) {
p2++;
} else {
// при равных элементах пропускаем в nums1
// для верной обработки дублей в nums1
p1++;
}
}
return result;
}
}
#include <vector>
using namespace std;
vector<int> findDifference(vector<int> nums1, vector<int> nums2) {
vector<int> result;
int p1 = 0;
int p2 = 0;
while (p1 < nums1.size()) {
// если nums2 закончился — все оставшиеся из nums1 идут в результат
if (p2 >= nums2.size()) {
result.push_back(nums1[p1]);
p1++;
continue;
}
// если текущий элемент nums1 меньше — он есть только в nums1
if (nums1[p1] < nums2[p2]) {
result.push_back(nums1[p1]);
p1++;
} else if (nums1[p1] > nums2[p2]) {
p2++;
} else {
// при равных элементах пропускаем в nums1
// для верной обработки дублей в nums1
p1++;
}
}
return result;
}
package main
func findDifference(nums1 []int, nums2 []int) []int {
result := []int{}
p1 := 0
p2 := 0
for p1 < len(nums1) {
// если nums2 закончился — все оставшиеся из nums1 идут в результат
if p2 >= len(nums2) {
result = append(result, nums1[p1])
p1++
continue
}
// если текущий элемент nums1 меньше — он есть только в nums1
if nums1[p1] < nums2[p2] {
result = append(result, nums1[p1])
p1++
} else if nums1[p1] > nums2[p2] {
p2++
} else {
// при равных элементах пропускаем в nums1
// для верной обработки дублей в nums1
p1++
}
}
return result
}
import java.util.*;
public class Solution {
public List<Integer> findDifference(List<Integer> nums1, List<Integer> nums2) {
List<Integer> result = new ArrayList<>();
int p1 = 0;
int p2 = 0;
while (p1 < nums1.size()) {
// если nums2 закончился — все оставшиеся из nums1 идут в результат
if (p2 >= nums2.size()) {
result.add(nums1.get(p1));
p1++;
continue;
}
// если текущий элемент nums1 меньше — он есть только в nums1
if (nums1.get(p1) < nums2.get(p2)) {
result.add(nums1.get(p1));
p1++;
} else if (nums1.get(p1) > nums2.get(p2)) {
p2++;
} else {
// при равных элементах пропускаем в nums1
// для верной обработки дублей в nums1
p1++;
}
}
return result;
}
}
from typing import *
def find_difference(nums1: List[int], nums2: List[int]) -> List[int]:
result = []
p1 = 0
p2 = 0
while p1 < len(nums1):
# если nums2 закончился — все оставшиеся из nums1 идут в результат
if p2 >= len(nums2):
result.append(nums1[p1])
p1 += 1
continue
# если текущий элемент nums1 меньше — он есть только в nums1
if nums1[p1] < nums2[p2]:
result.append(nums1[p1])
p1 += 1
elif nums1[p1] > nums2[p2]:
p2 += 1
else:
# при равных элементах пропускаем в nums1
# для верной обработки дублей в nums1
p1 += 1
return result
export function findDifference(nums1, nums2) {
const result = [];
let p1 = 0;
let p2 = 0;
while (p1 < nums1.length) {
// если nums2 закончился — все оставшиеся из nums1 идут в результат
if (p2 >= nums2.length) {
result.push(nums1[p1]);
p1 += 1;
continue;
}
// если текущий элемент nums1 меньше — он есть только в nums1
if (nums1[p1] < nums2[p2]) {
result.push(nums1[p1]);
p1 += 1;
} else if (nums1[p1] > nums2[p2]) {
p2 += 1;
} else {
// при равных элементах пропускаем в nums1
// для верной обработки дублей в nums1
p1 += 1;
}
}
return result;
}
Оценка сложности
Время: O(n+m), где n - размер nums1; m - размер nums2