Senior
/* Bemenetként egy nums nevű tömb van, amelynek hossza n. Minden szám a tömbben lehet egyedi vagy kétszer is előfordulhat. A számok az [1, n] tartományban vannak. Írjon egy olyan függvényt, amely csak azokat a számokat tartalmazó tömböt adja vissza, amelyek kétszer fordulnak elő. Példák: Bemenet: nums = [4, 3, 2, 7, 8, 2, 3, 1] Kimenet: [2, 3] Bemenet: nums = [2, 2, 1] Kimenet: [2] */
sobes.tech MI
Válasz az MI-től
go func findDuplicates(nums []int) []int { duplicates := []int{} for _, num := range nums { index := abs(num) - 1 if nums[index] < 0 { duplicates = append(duplicates, abs(num)) } else { nums[index] = -nums[index] } } return duplicates }
func abs(a int) int { if a < 0 { return -a } return a }
Ez az algoritmus kihasználja a tömb tulajdonságait: 1-től n-ig terjedő számokat, és megváltoztatja a számhoz tartozó indexen lévő elem előjelét. Ha az elem már negatív, az azt jelenti, hogy a szám másodszor fordul elő, és hozzáadjuk az eredményhez. Ez a módszer O(n) időben és O(1) extra memóriában működik.