JS Есть матрица. Ввести в одномерный массив строки, в которых есть одинаковые элемента
Есть задача. Дана прямоугольная матрица размерности M x N. Сформировать одномерный массив, в который занести номера тех строк, в которых есть одинаковые элементы. Если таких нет, то вывести соответствующие сообщение. Я пытался делать с помощью сравнение первого элемента с каждым последующим, через счётчик цикла for. Но прикол в том, что он сравнивал первое значение с каждым следующим, а не к примеру второе со следующим.
for(i = 0; i < array.length; i++){
for(j = 0; j < array.length; j++){
if(array[i][0] != array[i][j]){
if(array[i][0] == array[i][j]){
savemo
}
}
}
}
Если это возможно можно показать разные пути решения, нетолько через дополнительные методы.
Ответы (2 шт):
var result = [];
for(var i = 0; i < array.length; i++) {
var line = array[i];
var found = false;
for(var j = 0; !found && j < line.length; j++) {
for(var k = j + 1; !found && k < line.length; k++) {
if (line[j] == line[k])
found = true;
}
}
if (found)
result.push(i);
}
if (result.length == 0)
result = "All rows consist of unique elements.";
console.log(result);
Можно ещё так схитрить:
const arr = [
[0, 1, 1],
[0, 1, 2],
[0, 1, 0],
];
const linesWithDuplicates = arr.reduce(
(acc, line, i) => {
if (line.length > new Set(line).size) acc.push(i);
return acc;
},
[]
);
if (linesWithDuplicates.length) console.log(linesWithDuplicates);
else console.log('No duplicates.');
Или так:
const arr = [
[0, 1, 1],
[0, 1, 2],
[0, 1, 0],
];
const linesWithDuplicates = arr.flatMap(
(line, i) => line.length > new Set(line).size ? [i] : []
);
if (linesWithDuplicates.length) console.log(linesWithDuplicates);
else console.log('No duplicates.');
Но если матрицы большие, перебор в цикле с ранней остановкой при нахождении дубликата будет быстрее и памяти меньше будет расходовать.