मान लीजिए, हमें पूर्णांकों की एक क्रमबद्ध सरणी दी गई है, आइए इसे arr कहते हैं। हमें ऐसा पूर्णांक x ढूंढना है कि इसका मान -
abs(a[0] - x) + abs(a[1] - x) + ... + abs(a[a.length - 1] - x)
सबसे छोटा संभव हो (यहां abs निरपेक्ष मान दर्शाता है)। यदि कई संभावित उत्तर हैं, तो सबसे छोटा आउटपुट करें।
उदाहरण के लिए -
के लिए,
arr = [2, 4, 7],
आउटपुट होना चाहिए -
absoluteValuesSumMinimization(arr) = 4
क्योंकि abs(2 - 4) + abs(4 - 4) + abs(7 - 4) = 5 जो किसी भी संख्या के साथ प्राप्त होने वाला सबसे छोटा है।
हम जानते हैं कि,
arr.length / 2
आधी लंबाई लौटाता है। सम-लंबाई वाली सरणियों के लिए, यह मध्य के दाईं ओर होगा। विषम-लंबाई वाली सरणियों के लिए, यह मध्य होगा।
- Math.ceil(arr.length/2) आवश्यकता पड़ने पर ऊपर गोल करता है, इसलिए 5 की सरणी का मध्य 2.5 -> 3 होगा। यह विषम-लंबाई वाली सरणियों को एक से ऑफ-बाय-वन बनाता है।
- Math.ceil(arr.length/2)-1 एक अनुक्रमणिका नीचे जाता है। यह सभी सरणियों के लिए ऑफ-बाय-वन त्रुटियों को सही करता है।
उदाहरण
निम्नलिखित कोड है -
const arr = [2, 4, 7];
const absoluteValuesSumMinimization = (arr = []) => {
const res = [];
arr.forEach(num => {
const sum = arr.reduce((accum, next) => {
return accum + Math.abs(next - num);
}, 0);
res.push(sum);
});
const lowest = Math.min(...res);
return arr[res.indexOf(lowest)];
};
console.log(absoluteValuesSumMinimization(arr));आउटपुट
कंसोल पर आउटपुट होगा -
4