diff --git a/lib/intersectionSortedArray/index.ts b/lib/intersectionSortedArray/index.ts new file mode 100644 index 0000000..fab5d57 --- /dev/null +++ b/lib/intersectionSortedArray/index.ts @@ -0,0 +1,3 @@ +import { intersectionSortedArray } from "./intersectionSortedArray"; + +export default intersectionSortedArray; diff --git a/lib/intersectionSortedArray/intersectionSortedArray.test.ts b/lib/intersectionSortedArray/intersectionSortedArray.test.ts new file mode 100644 index 0000000..c27d04b --- /dev/null +++ b/lib/intersectionSortedArray/intersectionSortedArray.test.ts @@ -0,0 +1,13 @@ +import { describe, it, expect } from "vitest"; +import { intersectionSortedArray } from "./intersectionSortedArray.ts"; + +describe("intersectionSortedArray", () => { + + it("[1,2,3,3,4,5,6] [3,3,5] => [3,3,5]", () => { + expect(intersectionSortedArray([1, 2, 3, 3, 4, 5, 6], [3, 3, 5])).toEqual([3, 3, 5]); + }); + + it("[1,2,3,4,5,6] [3,5] => [3,5]", () => { + expect(intersectionSortedArray([1, 2, 3, 4, 5, 6], [3, 5])).toEqual([3, 5]); + }); +}); diff --git a/lib/intersectionSortedArray/intersectionSortedArray.ts b/lib/intersectionSortedArray/intersectionSortedArray.ts new file mode 100644 index 0000000..a3cf893 --- /dev/null +++ b/lib/intersectionSortedArray/intersectionSortedArray.ts @@ -0,0 +1,20 @@ +export function intersectionSortedArray(a: number[], b: number[]): number[] { + let res: number[] = []; + let aI = 0; + let bI = 0; + + while (aI < a.length && bI < b.length) { + let aValue = a[aI]; + let bValue = b[bI]; + + if (aValue === bValue) { + res.push(aValue); + aI++; + bI++; + } else { + aValue < bValue ? aI++ : bI++; + } + } + + return res; +}; diff --git a/lib/intersectionSortedArray/readme.md b/lib/intersectionSortedArray/readme.md new file mode 100644 index 0000000..2f16ce1 --- /dev/null +++ b/lib/intersectionSortedArray/readme.md @@ -0,0 +1,110 @@ +## hai-week-3-intersection-array + +## описание задачи + +Find the intersection of two **sorted** arrays **OR** in other words, given 2 sorted arrays, find all the elements which occur in both arrays. + +**NOTE:** For the purpose of this problem ( as also conveyed by the sample case ), assume that elements that appear more than once in both arrays should be included multiple times in the final output. + + + +**Problem Constraints** + +1 <= **|A|** <= 106 +1 <= **|B|** <= 106 + + + +**Input Format** + +The first argument is an integer array A. +The second argument is an integer array B. + + + +**Output Format** + +Return an array of intersection of the two arrays. + + + +**Example Input** + +**Input 1**: +**A**: [1 2 3 3 4 5 6] +**B**: [3 3 5] + +**Input 2**: +**A**: [1 2 3 3 4 5 6] +**B**: [3 5] + + + +**Example Output** + +**Output 1**: [3 3 5] + +**Output 2**: [3 5] + + + +**Example Explanation** + +Explanation 1: + +3, 3, 5 occurs in both the arrays A and B + +Explanation 2: + +Only 3 and 5 occurs in both the arrays A and B + +## тест кейсы + +## текстовое описание решения + +## ассимптотическая оценка + +| Description | Estimation | +| ----------- | ------------- | +| time: | `O(n+m)` | +| mem: | `O(min(n,m))` | + +## time + +| Description | Time | +| ------------------------------------------- | ----- | +| анализ и сбор информации | 14:20 | +| обдумываение решения и формулировка решения | 25:30 | +| имплементация | 06:10 | +| исправление ошибок | 06:12 | +| полное время затраченое на решение | 51:14 | +## журнал ошибок + +- условие окончание цикла поставил `||` вместо `&&` +- двигал указатели каждый и после условия равенства и после проверки большего меньшего, вы нес проверку в исключающуся ветвь else +## code + +### typescript + +```ts +export function intersectionSortedArray(a: number[], b: number[]): number[] { + let res: number[] = []; + let aI = 0; + let bI = 0; + + while (aI < a.length && bI < b.length) { + let aValue = a[aI]; + let bValue = b[bI]; + + if (aValue === bValue) { + res.push(aValue); + aI++; + bI++; + } else { + aValue < bValue ? aI++ : bI++; + } + } + + return res; +}; +```