Привет, люди !!!

Наконец-то мы закончили с одной из самых важных структур данных, то есть с массивами.

В предыдущем посте я опубликовал несколько источников для практики и доработки массивов. Я также разместил свои личные заметки о подготовке к собеседованию для массивов, таких как концептуальные вопросы, которые можно задать на собеседовании.



DSA Day-11
Массивы примечаний к окончательной редакции + практические материалы + подготовка к собеседованию medium.com



Теперь, прежде чем перейти к следующей структуре данных, я просто хочу дать вам еще один день, чтобы завершить вашу практику работы с массивами. Итак, сегодня я опубликую короткую самооценку, которая займет немного времени.

Часть 1: MCQ (обычно задается в онлайн-тестах)

  1. Что произойдет, если в программе на C вы присвоите значение элементу массива, индекс которого превышает размер массива?

A. Элемент будет установлен на 0.

Б. Компилятор сообщит об ошибке.

C. Программа может аварийно завершить работу, если некоторые важные данные будут перезаписаны.

D. Размер массива соответственно увеличится.

2.
В C, если вы передаете массив в качестве аргумента функции, что на самом деле передается?

A. Значение элементов в массиве

Б. Первый элемент массива

В. Базовый адрес массива.

D. Адрес последнего элемента массива.

3. Каким будет результат работы программы?

#include<stdio.h>
int main()
{
    int a[5] = {5, 1, 15, 20, 25};
    int i, j, m;
    i = ++a[1];
    j = a[1]++;
    m = a[i++];
    printf("%d, %d, %d", i, j, m);
    return 0;
}

A.2, 1, 15

B.1, 2, 5

C.3, 2, 15

D.2, 3, 20

4. Каким будет результат работы программы?

#include<stdio.h>
int main()
{
    static int a[2][2] = {1, 2, 3, 4};
    int i, j;
    static int *p[] = {(int*)a, (int*)a+1, (int*)a+2};
    for(i=0; i<2; i++)
    {
        for(j=0; j<2; j++)
        {
            printf("%d, %d, %d, %d\n", *(*(p+i)+j), *(*(j+p)+i), 
                                    *(*(i+p)+j), *(*(p+j)+i));
        }
    }
    return 0;
}

A.1, 1, 1, 1
2, 3, 2, 3
3, 2, 3, 2
4, 4, 4, 4

B.1, 2, 1, 2
2, 3, 2, 3
3, 4, 3, 4
4, 2, 4, 2

C.1, 1, 1, 1
2, 2, 2, 2
2, 2, 2, 2
3, 3, 3, 3

D.1, 2, 3, 4
2, 3, 4, 1
3, 4, 1, 2
4, 1, 2, 3

5.
Каким будет результат работы программы?

#include<stdio.h>
void fun(int **p);
int main()
{
    int a[3][4] = {1, 2, 3, 4, 4, 3, 2, 8, 7, 8, 9, 0};
    int *ptr;
    ptr = &a[0][0];
    fun(&ptr);
    return 0;
}
void fun(int **p)
{
    printf("%d\n", **p);
}

A.1

B.2

C.3

D.4

Запишите свои ответы и пока не переходите к разделу с ответами.

Часть 2: Вопросы по кодированию (обычно в онлайн-тестах задают 2–3 вопроса по кодированию)

  1. Https://leetcode.com/problems/spiral-matrix/
  2. Https://leetcode.com/problems/squares-of-a-sorted-array/

Попробуйте полностью решить первый вопрос за 40 минут, а второй вопрос за 20–30 минут. Если вы это сделаете, вы на правильном пути, иначе вам нужно больше практиковаться. Но не волнуйтесь, я буду время от времени публиковать такие самооценки. Так что тренируйтесь почаще.

Часть-3: Вопросы для собеседования

  1. Разница между массивом и вектором. Обсудите преимущества и недостатки обоих.
  2. Определить массивы указателей
  3. Как бы вы повернули массив влево 3 раза? Упомяните о временных и пространственных сложностях. Оптимизируйте свое решение.

Оставляйте свое мнение в комментариях и не стесняйтесь давать предложения о том, как я могу улучшить свои блоги.

PS: Меня больше волнует, когда кто-то высказывает негативное мнение, потому что это дает мне возможность импровизировать.

Решения: MCQ

  1. C
  2. C
  3. C
  4. C
  5. A