Sobes.tech
Senior

/* Ներմուծման մեջ կա թվերի nums զանգված, որի երկարությունը n է: Զանգվածի յուրաքանչյուր թիվ կարող է լինել միայնակ կամ կրկնակի։ Թվերը գտնվում են [1, n] միջակայքում։ Պետք է գրել ֆունկցիա, որը կվերադարձնի միայն այն թվերի զանգվածը, որոնք կրկնվում են երկու անգամ: Օրինակներ: Ներմուծում: nums = [4, 3, 2, 7, 8, 2, 3, 1] Ելք: [2, 3] Ներմուծում: nums = [2, 2, 1] Ելք: [2] */

sobes.tech AI

Պատասխան AI-ից

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 }


Այս ալգորիթմը օգտագործում է զանգվածի հատկությունները՝ թվեր 1-ից n, և փոխում է տարրերի նշանը համապատասխան ինդեքսում, որը համընկնում է թվի արժեքին: Եթե տարրը արդեն բացասական է, նշանակում է, որ թիվը երկրորդ անգամ է հանդիպում, և մենք ավելացնում ենք այն արդյունքի մեջ: Այս մոտեցումը աշխատում է O(n) ժամանակում և O(1) լրացուցիչ հիշողությամբ։