Попалась задачка на собеседовании: есть нули и единицы в массиве. Надо для каждого нуля посчитать сколько единиц правее него и вывести сумму таких чисел. Сделать за один проход.
Допустим есть массив из нулей и единиц:
int[] z = { 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1 };
Увидев 0 нужно посчитать все числа, после него и записать в переменную(или нет) то есть 12. следующий 11, 6, 3, 2, 1. В итоге должно получиться 35. Подскажите как это сделать программно в рамках задачи.
Можно написать такой метод расширения для аккумуляции:
static class Extensions
{
public static IEnumerable<int> Accumulate<T>(
this IEnumerable<T> source, Func<T, bool> condition)
{
int count = 0;
foreach (var x in source)
if (condition(x)) count++;
else yield return count;
}
}
И использовать его так:
int[] z = { 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1 };
foreach (var x in z.Reverse().Accumulate(x => x == 1).Reverse())
Console.WriteLine(x);
Проход с начала
int[] z = { 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1 };
var sum = 0;
var mult = 0;
for(var i=0; i<z.Length; i++)
{
if (z[i] == 0) mult++;
else sum += mult;
}
Console.WriteLine(sum);
Проход с конца
int[] z = { 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1 };
var sum = 0;
var ones = 0;
for(var i=z.Length-1; i>=0; i--)
{
if (z[i] == 1) ones++;
else sum += ones;
}
Console.WriteLine(sum);
Можно сделать вот так, начиная проход с начала. Обозначаем в консоли ноль и считаем после него количество единиц:
bool Null = false;
int sum = 0;
int[] array = { 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1 };
foreach (int x in array)
{
if (x == 0)
{
Console.WriteLine("Null");
if (Null == false)
Null = true;
else if (Null == true)
{
sum = 0;
}
}
if (x == 1)
{
if (Null == true)
{
sum++;
Console.WriteLine(sum);
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Проблема такая, при переносе онлайн игры на другой хостинг возникает ошибки следующего родаСразу говорю ссылки все нормальные не битые
Вопрос такой: дан массив, нужно чтобы с начало выводились те слова длинна которых больше 6, а остальное ниже И что тут не так ?
Я хочу создать функцию, которая будет запрещать флудить, то есть, чтобы можно было писать сообщение раз в 5 секунд, к примеруХочу понять сам...
Пытаюсь разобраться с тем, как построить график при помощи расширения yii2-highcharts-widget, чтобы по оси X шли месяцы, а по оси Y Вот код из оффдоки: