जब तक सरणी का योग एक सीमा से अधिक है, तब तक मैं किसी सरणी के अंतिम आइटम को निकालने का प्रयास कर रहा हूं। मेरे पास कोड काम करता है लेकिन ऐसा लगता है कि धीमी गति या दुर्घटना होती है। मैं सोच रहा था कि क्या कोई और अधिक सुरुचिपूर्ण समाधान है।

let array = [166, 157, 251, 171, 191];
let limit = 400;

for (
  let sum = array.reduce((a, b) => a + b); sum > limit; sum = array.reduce((a, b) => a + b)
) {
  array.pop();
}

console.log(array);
2
João Pedro 5 सितंबर 2021, 06:34

3 जवाब

सबसे बढ़िया उत्तर

यह समाधान O(n) में परिणाम प्राप्त करेगा

आप परिणाम प्राप्त कर सकते हैं यदि आप array पर लूप करते हैं और अंतिम कुल यानी currentTotal को याद करते हैं और पुनरावृत्ति को रोकते हैं और break को लूप से बाहर करते हैं यदि

currentTotal + val > limit

अन्यथा currentTotal में वर्तमान मान जोड़ें और उस तत्व को result सरणी में धकेलें।

let array = [166, 157, 251, 171, 191];
let limit = 400;

let currentTotal = 0;
const result = [];

for (let val of array) {
  if (currentTotal + val > limit) {
    break;
  }
  result.push(val);
  currentTotal += val;
}

console.log(result);
2
HR01M8055 5 सितंबर 2021, 03:57

आपको लूप के माध्यम से हर बार संपूर्ण सरणी को योग करने की आवश्यकता नहीं है। शुरुआत में एक बार योग की गणना करें। फिर उस तत्व को घटाएं जिसे आपने योग से निकाला था।

let array = [166, 157, 251, 171, 191];
let limit = 400;

for (let sum = array.reduce((a, b) => a + b); sum > limit; sum -= array.pop()) {}

console.log(array);
2
Barmar 5 सितंबर 2021, 03:39

यह काम करना चाहिए:

const threshold = 10;
let sum = 0;
arr = [1, 2, 3, 5, 6, 3];
const filteredArray = arr.filter((el) => {
  sum += el;
  return sum <= threshold;
});
0
Pavan J 5 सितंबर 2021, 04:33