Форум программистов, компьютерный форум, киберфорум
alhaos
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

[golang] 274. H-Index

Запись от alhaos размещена 04.02.2025 в 06:24
Показов 1863 Комментарии 0
Метки go, problem

Дан целочисленный слайс, индексы в нем это индексы статей, а элементы - это количество цитат приходящиеся на опубликованную статью. 

Задача рассчитать индекс Хирша

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// [url]https://leetcode.com/studyplan/top-interview-150/[/url]
 
package topInterview
 
import (
    "sort"
)
 
// hIndex
//
// 274. H-Index
//
// Given an array of integers citations where citations[i] is the number of citations a researcher received for their ith paper, return the researcher's h-index.
//
// According to the definition of h-index on Wikipedia: The h-index is defined as the maximum value of h such that the given researcher has published at least h papers that have each been cited at least h times.
//
// Example 1:
//
// Input: citations = [3,0,6,1,5]
// Output: 3
// Explanation: [3,0,6,1,5] means the researcher has 5 papers in total and each of them had received 3, 0, 6, 1, 5 citations respectively.
// Since the researcher has 3 papers with at least 3 citations each and the remaining two with no more than 3 citations each, their h-index is 3.
// Example 2:
//
// Input: citations = [1,3,1]
// Output: 1
//
// Constraints:
//
// n == citations.length
// 1 <= n <= 5000
// 0 <= citations[i] <= 1000//
func hIndex(citations []int) int {
 
    // Воспользуюсь сортировкой целочисленных слайсов с произвольной функцией сортировки
    // Отсортировать слайс по убыванию
    sort.Slice(citations, func(i, j int) bool {
        return citations[i] > citations[j]
    })
 
    // Переменная hIndexValue содержит крайний h-индекс подходящий под критерии
    hIndexValue := 0
    // Цикл range по элементам слайса citations
    // i индекс текущего элемента слайса
    // v значение текущего элемента слайса
    for i, v := range citations {
        // если значение текущего элемента слайса больше индекса элемента
        if v >= i+1 {
            // Обновляем hIndexValue становится индексом текущего элемента плюс единица так как чети индекса ведется с единицы
            hIndexValue = i + 1
            // Прервать итерацию цикла
            continue
        }
        // Прервать цикл
        break
    }
 
    // Вернуть значение h-индекса
    return hIndexValue
}
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func TestHIndex(t *testing.T) {
 
    data := []struct {
        citations []int
        expected  int
    }{
        {
            []int{3, 0, 6, 1, 5},
            3,
        },
        {
            []int{1, 3, 1},
            1,
        },
    }
 
    for i, datum := range data {
 
        result := hIndex(datum.citations)
 
        if result != datum.expected {
            t.Errorf("unexpected result for test index %d expected [%+v] got [%+v]", i, datum.expected, result)
        }
    }
}
Code
1
2
3
=== RUN   TestHIndex
--- PASS: TestHIndex (0.00s)
PASS
https://github.com/alhaos/problems
Метки go, problem
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru