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

[golang] 88. Merge Sorted Array

Запись от alhaos размещена 27.01.2025 в 11:29
Показов 3069 Комментарии 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
61
62
63
64
65
66
67
68
69
70
71
package topInterview
 
// [url]https://leetcode.com/studyplan/top-interview-150/[/url]
 
// merge problem
//
// 88. Merge Sorted Array
//
// You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n,
// representing the number of elements in nums1 and nums2 respectively.
//
// Merge nums1 and nums2 into a single array sorted in non-decreasing order.
// The final sorted array should not be returned by the function, but instead be stored inside the array nums1. To
// accommodate this, nums1 has a length of m + n, where the first m elements denote the elements that should be merged,
// and the last n elements are set to 0 and should be ignored. nums2 has a length of n.
//
// Example 1:
//
// Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
// Output: [1,2,2,3,5,6]
// Explanation: The arrays we are merging are [1,2,3] and [2,5,6].
// The result of the merge is [1,2,2,3,5,6] with the underlined elements coming from nums1.
// Example 2:
//
// Input: nums1 = [1], m = 1, nums2 = [], n = 0
// Output: [1]
// Explanation: The arrays we are merging are [1] and [].
// The result of the merge is [1].
// Example 3:
//
// Input: nums1 = [0], m = 0, nums2 = [1], n = 1
// Output: [1]
// Explanation: The arrays we are merging are [] and [1].
// The result of the merge is [1].
// Note that because m = 0, there are no elements in nums1. The 0 is only there to ensure the merge result can fit in nums1.
//
// Вам даны два целочисленных массива nums1 и nums2, отсортированных в неубывающем порядке, и два целых числа m и n,
// представляющих количество элементов в nums1 и nums2 соответственно.
//
// Объедините nums1 и nums2 в один массив, отсортированный в неубывающем порядке.
// Окончательный отсортированный массив не должен возвращаться функцией, а вместо этого должен храниться внутри массива
// nums1. Чтобы учесть это, nums1 имеет длину m + n, где первые m элементов обозначают элементы, которые должны быть
// объединены, а последние n элементов устанавливаются в 0 и должны игнорироваться. nums2 имеет длину n.
func merge(nums1 []int, m int, nums2 []int, n int) {
 
    // Инициализировать переменные в которых будут индексы слайсов
    index1 := m - 1          // Индекс просматриваемого элемента в слайсе nums1
    index2 := n - 1          // Индекс просматриваемого элемента в слайсе nums2
    commonIndex := m + n - 1 // Индекс заполняемого элемента в слайсе nums1
 
    // Остановить цикл когда перебраны все элементы в слайсе nums2
    for index2 >= 0 {
        // Если еще не перебраны все элементы слайса num1
        // и текущий элемент слайса num2 больше элемента в стайсе nums1
        if index1 >= 0 && nums1[index1] > nums2[index2] {
            // Заменить крайний элемент в слайсе nums1 на текущий элемент
            // слайса nums1
            nums1[commonIndex] = nums1[index1]
            // Уменьшить индекс текущего элемента в nums1
            index1--
        } else {
            // В случае когда перебраны все элементы слайса nums1 или
            // текущий элемент слайса nums2 больше текущего элемента слайса nums1
            nums1[commonIndex] = nums2[index2]
            // Уменьшить индекс текущего элемента в nums2
            index2--
        }
        // Уменьшить индекс заполняемого элемента в nums1
        commonIndex--
    }
}
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
package topInterview
 
import (
    "reflect"
    "testing"
)
 
func TestMergeSortedArray(t *testing.T) {
    data := []struct {
        num1     []int
        m        int
        num2     []int
        n        int
        expected []int
    }{
        {
            num1:     []int{1, 2, 3, 0, 0, 0},
            m:        3,
            num2:     []int{2, 5, 6},
            n:        3,
            expected: []int{1, 2, 2, 3, 5, 6},
        },
        {
            num1:     []int{1},
            m:        1,
            num2:     []int{},
            n:        0,
            expected: []int{1},
        },
        {
            num1:     []int{4, 5, 6, 0, 0, 0},
            m:        3,
            num2:     []int{1, 2, 3},
            n:        3,
            expected: []int{1, 2, 3, 4, 5, 6},
        },
    }
 
    for i, datum := range data {
 
        merge(datum.num1, datum.m, datum.num2, datum.n)
 
        if !reflect.DeepEqual(datum.num1, datum.expected) {
            t.Errorf("unexpected result for test index %d expected %+v 'got %+v", i, datum.expected, datum.num1)
        }
    }
}
Code
1
2
3
=== RUN   TestMergeSortedArray
--- PASS: TestMergeSortedArray (0.00s)
PASS
https://github.com/alhaos/problems
Метки go, problem
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru