Skip to content

Commit

Permalink
Homework-2: readme has been updated with task G
Browse files Browse the repository at this point in the history
  • Loading branch information
dtr200 committed Jun 26, 2021
1 parent 28890ad commit ac5ae2f
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 1 deletion.
85 changes: 85 additions & 0 deletions homework-lecture-2/biggest-three.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
function getBiggestNumbersMult(list){
list = list.split(' ').map(num =>
Number(num));

if(list.length === 2){
return list[0] > list[1] ?
`${list[1]} ${list[0]}` :
`${list[0]} ${list[1]}`;
}

// Считаю количество минусовых чисел

let negative = [];
let negativePos = [];
let notNegative = false;

for(let i = 0; i < list.length; i++){
if(list[i] < 0){
negative.push(list[i]);
negativePos.push(i);
}
}

// Если негативное только одно, тогда убираю из массива.

if(negative.length === 1){
list.splice(negativePos[0], 1);
notNegative = true;
}

/* Ищу наибольшие значения или наименьшие среди минусовых.
В sign приходит false если работаю с минусовыми и
true для плюсовых */

const getBigger = (nums, sign) => {
let bigger = nums[0];
biggerPos = 0;
for(let i = 1; i < nums.length; i++){
const current = nums[i];
if( (!sign && current < bigger) ||
(sign && current > bigger) ){
bigger = current;
biggerPos = i;
}
}
return biggerPos;
}

const firstNegativePos = notNegative ? null :
getBigger(negative, false);
const firstPositivePos = getBigger(list, true);

const firstNegative = negative[firstNegativePos];
const firstPositive = list[firstPositivePos];

// Удаляю наибольшие значения чтобы не мешались
negative.splice(firstNegativePos, 1);
list.splice(firstPositivePos, 1);

const secondNegativePos = notNegative ? null :
getBigger(negative, false);
const secondPositivePos = getBigger(list, true);

const secondNegative = negative[secondNegativePos];
const secondPositive = list[secondPositivePos];

const negativeMult = firstNegative * secondNegative;
const positiveMult = firstPositive * secondPositive;

const getResult = (first, second) => {
return first > second ?
`${second} ${first}` :
`${first} ${second}`;
}

let result;
if(negativeMult > positiveMult)
result = getResult(firstNegative, secondNegative);
else
result = getResult(firstPositive, secondPositive);

return result;
}

getBiggestNumbersMult('-4 3 -5 2 5');
33 changes: 32 additions & 1 deletion homework-lecture-2/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,4 +179,35 @@ CONSTANT
#### Вывод
0

### Неполное решение: competition.js (8 тестов)
### Неполное решение: competition.js (8 тестов)

# G. Наибольшее произведение двух чисел

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

Список содержит не менее двух элементов. Числа подобраны так, что ответ однозначен.

Решение должно иметь сложность O(n), где n - размер списка.

### Пример 1
#### Ввод
4 3 5 2 5

#### Вывод
5 5

### Пример 2
#### Ввод
-4 3 -5 2 5

#### Вывод
-5 -4

### Пример 3
#### Ввод
12288 -10075 29710 15686 -18900 -17715 15992 24431 6220 28403 -23148 18480 -22905 5411 -7602 15560 -26674 11109 -4323 6146 -1523 4312 10666 -15343 -17679 7284 20709 -7103 24305 14334 -12281 17314 26061 25616 17453 16618 -24230 -19788 21172 11339 2202 -22442 -20997 1879 -8773 -8736 5310 -23372 12621 -25596 -28609 -13309 -13 10336 15812 -21193 21576 -1897 -12311 -6988 -25143 -3501 23231 26610 12618 25834 -29140 21011 23427 1494 15215 23013 -15739 8325 5359 -12932 18111 -72 -12509 20116 24390 1920 17487 25536 24934 -6784 -16417 -2222 -16569 -25594 4491 14249 -28927 27281 3297 5998 6259 4577 12415 3779 -8856 3994 19941 11047 2866 -24443 -17299 -9556 12244 6376 -13694 -14647 -22225 21872 7543 -6935 17736 -2464 9390 1133 18202 -9733 -26011 13474 29793 -26628 -26124 27776 970 14277 -23213 775 -9318 29014 -5645 -27027 -21822 -17450 -5 -655 22807 -20981 16310 27605 -18393 914 7323 599 -12503 -28684 5835 -5627 25891 -11801 21243 -21506 22542 -5097 8115 178 10427 25808 10836 -11213 18488 21293 14652 12260 42 21034 8396 -27956 13670 -296 -757 18076 -15597 4135 -25222 -19603 8007 6012 2704 28935 16188 -20848 13502 -11950 -24466 5440 26348 27378 7990 -11523 -26393

#### Вывод
29710 29793

### Решение: biggest-numbers-mult.js

0 comments on commit ac5ae2f

Please sign in to comment.