#javascript
#javascript
Вопрос:
Вот в чем проблема: найти количество подмассивов в массиве, который имеет заданную сумму.
эта программа вводит 2 параметра number array и sum.
например: Подмассив NT([1,2,3,2,1,8,-3],5)
и результатом должно быть количество подмассивов, соответствующих заданной сумме. (вывод должен быть 3 для примера выше {2,3}, {3,2}, {8,-3} ( количество подмассивов))
Я пытался это сделать, но есть проблема, связанная с тем, что он не выполняет требование «Ответ должен быть действительным для любого заданного ввода»
Вот мой код:
function subArrayCnt(arr, sum) {
for (var i = 0; i < arr.length; i ) {
var str = [];
var csum= 0;
var output = 0;
for (var j = i; j < arr.length; j ) {
csum = arr[j];
str.push(arr[j]);
if (csum== sum) {
return(str[i]);
}
}
}
}
console.log(subArrayCnt([1,2,3,2,1,8,-3],5));
эта программа предоставляет количество подмассивов, но она не выполняет требование «Ответ должен быть действительным для любого заданного ввода», где должно быть исправлено? пожалуйста, любые предложения.
Комментарии:
1. как насчет
1,2,3,2,-3
и2,3,2,1,-3
?2. здесь ответ должен быть действительным для любого заданного ввода, также я должен принимать отрицательные числа
3. Почему вы возвращаете ` return(str[i]); `?
4. для получения количества элементов в str. это неправильный путь?
5. @SoWeLaugh_ нет, это числа из вашего входного массива, и они также имеют сумму 5. Являются ли эти результаты допустимыми? Если нет, то почему бы и нет? Что определяет допустимый результат?
Ответ №1:
Другие ответы, похоже, игнорируют тот факт, что сумма может быть получена из любого количества элементов массива. Рекурсия — лучший подход здесь.
function subArrayCnt(arr, sum){
return subArrayRecurse(arr, sum, 0, [], 0)
}
function subArrayRecurse(arr, sum, currentSum, curArray, i){
var count = 0;
//check the current index
var newSum = currentSum arr[i];
var newSubArray = curArray.concat([arr[i]]);
if(newSum == sum) {
console.log('found another: ' newSubArray);
count ;
}
if(i 1 < arr.length) {
//try including the current in further sums
count = subArrayRecurse(arr, sum, newSum, newSubArray, i 1);
//try not including the current in further sums
count = subArrayRecurse(arr, sum, currentSum, curArray, i 1);
}
return count;
}
console.log(subArrayCnt([1,2,3,2,1,8,-3],5));
// 8
8 комбинаций из приведенного выше примера являются:
1,2,3,2,-3
1,2,2
1,3,1
2,3
2,3,2,1,-3
2,2,1
3,2
8,-3
Ответ №2:
Из вашего примера я предположил, что сумма двух последовательных элементов должна быть суммой для квалификации.
function subArrayCnt(arr, sum) {
let outputArr = [];
for(var i=0; i<arr.length; i ){
if(arr[i] arr[i 1]==sum){
let obj = {l:arr[i],r:arr[i 1]};
outputArr.push(obj);
}
};
return outputArr.length;
};
Комментарии:
1. здесь, если мы зададим subArrayCnt([1,2,3,4],10), ответ должен быть 1. но это даст 0.
2. Должен ли [1,2,3,0,4] возвращать 1 или 0?
Ответ №3:
Попробуйте этот подход:
function subArrayCnt(arr, sum){
var count = 0;
for(var i = 0; i < arr.length-1; i ){
for(var n = i 1; n < arr.length; n ){
if(arr[i] arr[n] == sum){
count ;
}
}
}
return count;
}
console.log(subArrayCnt([1,2,3,2,1,8,-3],5));
// 3
Ответ №4:
Вы можете сделать это с помощью вложенного цикла. Это позволит получить все возможные смежные суммы, а затем вы можете сравнить эту сумму с заданной суммой и увеличить count
.
function func(arr,sum){
if(!Array.isArray(arr)) return 0;
let count = 0;
let cur = 0;
for(let i = 0;i<arr.length-1;i ){
cur = arr[i];
for(let j = i 1;j<arr.length;j ){
cur = arr[j];
if(cur === sum){
count ;
break;
}
if(cur > sum) break;
}
}
return count '';
}
console.log(func([1,2,3,2,1,8,-3],5)) //3
console.log(func([1,2,3,4],10)) //1
Комментарии:
1. getSubArrayCount([1,2,3,2,1,8,-3],5) должен быть равен 3. , getSubArrayCount([1,2,3,4], 10) эти 2 в порядке, но не соответствуют последнему требованию «Ответ должен быть действительным для любого заданного ввода». и в задаче есть подсказка: «пожалуйста, учитывайте только соседние числа».
2. @SoWeLaugh _ Дайте ссылку на проблему, я бы ее увидел.
3. ссылка не работает для внешних пользователей, вот в чем проблема. здесь проблема, как и в site. Найти количество подмассивов в массиве, который имеет заданную сумму. (совет: пожалуйста, учитывайте только смежные числа) Пример: Введите getSubArrayCount([1,2,3,2,1,8,-3],5) На выходе должно быть 3 примера комбинаций ({2,3}, {3,2}, {8,-3}) и это требование, которое необходимо выполнить: возвращаемый тип должен быть строковым. Подмассив NT([1,2,3,2,1,8,-3],5) должен быть равен 3. Подмассив NT([1,2,3,4],10) должен быть равен 1. Ответ должен быть действительным для любого заданного ввода.
4. @SoWeLaugh _ Я отредактировал код, который проверит, является элемент массивом или нет. Можете ли вы, пожалуйста, сказать, для какого конкретного ввода это не работает
5. @SoWeLaugh _ Возвращаемое значение должно быть строковым. Я отредактировал код, теперь протестируйте его
Ответ №5:
Попробуйте это:
<script>
function subArray(arr,sum)
{
var subArray=new Array();
count=0;
for(var i=0;i<arr.length;i )
{
if(arr[i] arr[i 1]==sum)
{
subArray[count]=[arr[i],arr[i 1]]
count ;
}
}
return subArray;
}
console.log(subArray([1,2,3,2,1,8,-3],5));
</script>
Ответ №6:
Попробуйте это:
Я написал эту функцию. Это соответствует требованию «Ответ должен быть действительным для любого заданного ввода».
function getSubArrayCount(arr, sum){
if(!Array.isArray(arr)) return 0;
var len = arr.length;
var count = 0;
for(var i = 0; i < len; i ){
var n = 0;
for(var j = i; j < len; j ){
n = arr[j];
if(n === sum) {
count ;
break;
}
}
}
return count;
}
getSubArrayCount([1,2,3,2,1,8,-3],5);