Ալգորիթմի բարդությունը ժամանակի և հիշողության առումով ինչպե՞ս է։
Golang
Ալգորիթմական բաժին՝ երկու խնդիր, որոնք մակարդակով Medium կամ բարձր են LeetCode-ում։ Ժամկետը՝ 1,5 ժամ երկու խնդիրների համար։
Դու հիմա աշխատո՞ւմ եք թե ոչ, և որ ձևաչափով՝ գրասենյակ, հիբրիդ, հեռավար։
/* Մեզ անհրաժեշտ է փոխանցել տվյալներ որոշ աղբյուրից որոշ սպառողի: Աղբյուրը փոքր խմբերով է տալիս տվյալներ (~ տասնյակ գրառումներ), իսկ սպառողը ավելի արդյունավետ է աշխատում մեծ խմբերով: Օրինակ՝ Kafka տիպի հերթերից տվյալների փոխանցումը Clickhouse բազա: Աղբյուր: - Կանխամտածված անսահմանափակ: - Աղբյուրը երբեք չի վերադարձնի ավելի քան MaxItems գրանցամատյան մեկ կանչով Next: - Միևնույն "սեսիայի" շրջանակում (մեկ Pipe ֆունկցիայի կանչում) աղբյուրը յուրաքանչյուր Next-ով նոր տվյալներ է վերադարձնում: - Սակայն, վերագործարկումից հետո աղբյուրը սկսում է նախորդ "հաստատված" դիրքից, որը նշված է cookie-ով: Այդ պատճառով, յուրաքանչյուր cookie արժեք, որը վերադարձվել է Next-ով, պետք է հաստատվի Commit-ով, և դա պետք է կատարվի նույն հերթականությամբ, ինչպես վերադարձվել է: Սպառող: - Չի կարող մշակել ավելի քան MaxItems միանգամից: Հիմնական մակարդակ: Պետք է իրականացնել func Pipe(p Producer, c Consumer) error ֆունկցիան՝ որոնք կկարդա տվյալները աղբյուրից, կկազմեն դրանք բուֆեր, որի չափը չի գերազանցի MaxItems-ը, և կպահեն սպառողում, հետո կստորագրեն առաջընթացը աղբյուրում: */ const MaxItems = 9999 type Producer interface { // Next վերադարձնում է՝ // - խմբաքանակ տվյալների // - cookie հաստատելու համար // - սխալ Next() (items []any, cookie int, err error) // Commit-ը նշում է, որ տվյալ խմբաքանակը մշակված է Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }
""" Ֆիլմի տեղերը տեղադրված են մեկ շարքում: Նոր ժամանած դիտողը ընտրում է տեղ, որպեսզի նստի հնարավորինս հեռու մյուս դիտողներից: Այսինքն, այն տեղից, որտեղ նա նստելու է, մինչև ամենամոտ դիտողը, պետք է լինի առավելագույն: Հավաստի է, որ միշտ կան ազատ տեղեր և արդեն նստած է առնվազն մեկ դիտող: Գրեք ֆունկցիա, որը տրված տեղերի շարքի (զրոներ և միավորներ) հիման վրա վերադարձնում է հեռավորությունը (տեղերի միջև ընկած քանակը) ընտրված տեղից մինչև ամենամոտ դիտող: [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 [0, 0, 0, 1] [1, 0, 0, 0] place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }
Ի՞նչն է տարբերությունը L4 և L7 բեռի հավասարակշռողների միջև։
Ի՞նչ արդյունավետության ցուցանիշներ եք օգտագործել վերջին նախագծում ձեր աշխատանքը գնահատելու համար։
/* * Տվյալ է ամբողջ թվերի զանգված և թիվ X, * անհրաժեշտ է գտնել ամենաերկար ոչ դատարկ ենթատողը, որի նվազագույնը հավասար է X-ի: * Վերադարձեք այդ ենթատողի երկարությունը կամ -1, եթե նմանը չկա: */
""" Կինոյում տեղերը դասավորված են մեկ շարքում: Նոր ժամանած դիտողը ընտրում է տեղ, որպեսզի նստի հնարավորինս հեռու մյուս դիտողներից շարքում: Այսինքն, տեղից, որտեղ նա նստելու է, մինչև ամենամոտ դիտողը, հեռավորությունը պետք է լինի առավելագույն: Հավաստագրված է, որ միշտ կան ազատ տեղեր և արդեն նստած է առնվազն մեկ դիտող: Գրեք ֆունկցիա, որը, տրված տեղերի շարքով (զրոներ և միավորներ), կվերադարձնի հեռավորությունը (տեղերի միջեւ միջակայքերի քանակը) ընտրված տեղից մինչև ամենամոտ դիտող: [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
Ի՞նչ փորձ ունեք հաստատման և թույլտվության համակարգերի ներդրման և կարգավորման գործում։
Որ նախագիծը ընտրել տեխնիկական հարցազրույցի համար և ինչպես նկարագրել այն?
Ինչպե՞ս որոշել տեսողական կամ ալգորիթմական կերպով, որ տարրն յուրահատուկ է Map տվյալների կառուցվածքում։
Ինչպե՞ս է որոշվում Map տվյալների կառուցվածքում բանալիով տարր ավելացնելու գործողության կատարման ժամանակը։
[անուն] նշել է. 20-րդ տողում uniq-ը չի պարունակում եզակի նիշերի քանակը, այլ ինչ-որ բան։ Ի՞նչ է դա։
Ի՞նչ ցուցանիշ եք հասել կամ վերլուծել տվյալների ընթերցման ժամանակ վայրկյանում կատարվող գործողությունների քանակի վերաբերյալ։
Ի՞նչ ցուցանիշ է հասանելի տվյալների գրառման ժամանակ՝ հարցումների/sec։
Ինչու են անհրաժեշտ երկու if ստուգումներ (շարքի 79-ին և այն շարքի վրա, որտեղ len(buf)==MaxItems), մի՞թե միայն մեկը չէ՞։
// Երկու ամբողջ թվերի զանգվածների համար երկարությամբ N, // համարեք բոլոր K-ների համար, 1-ից N-ով, համատեղ թվերի քանակը երկարությամբ K նախածանցներում: // Մասիվում թվերը կարող են կրկնվել, հատման հաշվարկը կատարվում է առանց բազմապատկությունների նկատառման: // A զանգվածի K երկարությամբ նախածանցը այն առաջին K տարրերն են զանգվածից A // A [1, 1] => [1], [1, 1] // B [1, 1] => [1], [1, 1] // R [1, 1] // [1, 2, 5] => [1], [1, 2], [1, 2, 5] // [1, 5, 4] => [1], [1, 5], [1, 5, 4] // [1, 1, 2]
Ինչպես շարժել պատուհանը սլայդ վինդո ալգորիթմում?
// Տվյալ են երկու դասավորված հաջորդականություններ ամբողջ թվերի՝ աճող կարգով: // Պետք է վերադարձնել առաջին հաջորդականության բոլոր այն տարրերը, որոնք չեն երկրորդում: // 0 <= N <= 10^6 // -10^9 <= a[i] <= 10^9 // [1] // [2, 3, 4, 5, 6] // [1] // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ...] // [1] // [2, 3, 4, 5, 6, 7, 8] func filter(first []int, second []int) []int { res := make([]int, 0, len(first)) i, j := 0, 0 for i < len(first) && j < len(second) { if first[i] < second[j] { result = append(result, first[i]) i++ } else if first[i] > second[j] { j++ } else { i++ j++ } } for i < len(first) { result = append(result, first[i]) i++ } return result }