Профил
Loading...
alexei.tcekov avatar alexei.tcekov 33 Точки

Колега сподели какво не ти излиза ? 

https://gist.github.com/alexeitcekov/470a80d0a4ea4bd440d2fb07c296b874

https://gist.github.com/alexeitcekov/a52a66a2eff02a0d91e78dded38437a6

0
18/05/2016 12:13:57
val4o89 avatar val4o89 240 Точки

На 8-ма нали с рекурсия трябва, аз я направих с рекурсия, но ми гърмят последните 2 теста за време. То мойта ай-петичка се зори бая :)

Как да го направя по-бързо? Ето моето р-ие за 75т. : https://github.com/val4o89/CSharp-Advanced-Softuni/blob/master/Program.cs

0
18/05/2016 13:34:16
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

Имате ли идея защо на простичък код като на зад.3 последните 2 теста ми дават Time limit ?

static void Main()
        {
            int n = int.Parse(Console.ReadLine());
            Stack<int> nums = new Stack<int>();
            for (int i = 0; i < n; i++)
            {
                string line = Console.ReadLine();
                if (line == "2")
                {
                    nums.Pop();
                }
                else if (line == "3")
                {
                    Console.WriteLine(nums.Max());
                }
                else
                {
                    nums.Push(int.Parse(line.Split(' ')[1]));
                }
            }
        }

Какво трябва да се оптимизира в случая?

0
val4o89 avatar val4o89 240 Точки

методът Max() e бавен и за това ти гърми, за това трябва да пазищ максималните стойности в помощен стек (втори, освен основния), и в случай, че попваш от основния трябва да попваш и от помощния.

2
DenisAngelov avatar DenisAngelov 2 Точки

Аз предлагам направо да си запазваш maxValue в един int все пак не е нужен цял stack за една цифра 

Редакция: 
Слагам линк към моето решение тъй като явно не си ме разбрал за maxValue-то

https://github.com/DenisAngelov/SoftUni-Advanced-CSharp/blob/master/01.BasicStackOperations/03.MaximumElement/MaxElement.cs

0
19/05/2016 10:52:59
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

С наставленията успях да го докарам до 100/100. Видях, че има препоръки за swich case. Така го бях направила в началото, но в случая не е от голямо значение. Според мен може и с if-else, кой както си предпочита.

Кодът е ТУК

Благодаря за насоките.

0
Alex0101 avatar Alex0101 374 Точки

С една цифра ще е трудно, защото можеш да попнеш макса от основния стек , а следващия макс да е по-навътре. Следователно ще пазиш макс в една променлива, обаче ако го попнеш от основния стек гърмиш

0
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

Нали заради това има допълнителен стек. Той пази предните max-ове. ? При Pop() от допълнителния стек int max се променя с стойността на предния мах, който е "по-навътре"... ако има бъг в логиката ще се радвам да чуя :)

0
silvi81 avatar silvi81 77 Точки

val4o89 На мен със същото решение ми дава 100 точки.

0
02/06/2016 19:16:03