অ্যারেতে শুরু থেকে k-তম এবং শেষ থেকে k-তম উপাদান পারস্পরিক বদলানো (সিম্পল)।
উদাহরণ
arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] k = 4 // ৪র্থ উপাদান (ইন্ডেক্স ৩): 3 // শেষ থেকে ৪র্থ (ইন্ডেক্স ৬): 6 // সিম্পল後: [0, 1, 2, 6, 4, 5, 3, 7, 8, 9]
সমাধান
const swapKth = (arr, k) => {
const len = arr.length;
// ভ্যালিডেশন
if (k < 1 || k > len) {
throw new Error(`k must be between 1 and ${len}`);
}
const startIndex = k - 1;
const endIndex = len - k;
// একই পজিশন হলে কিছু করবেন না
if (startIndex === endIndex) return arr;
// সিম্পল
[arr[startIndex], arr[endIndex]] = [arr[endIndex], arr[startIndex]];
return arr;
};
// টেস্ট
let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
swapKth(arr, 4);
console.log(arr); // [0, 1, 2, 6, 4, 5, 3, 7, 8, 9]
swapKth(arr, 8);
console.log(arr); // [0, 1, 7, 6, 4, 5, 3, 2, 8, 9]
ফাংশনাল (ইমিউটেবল) ভার্সন
const swapKthImmutable = (arr, k) => {
const len = arr.length;
if (k < 1 || k > len) return [...arr];
const result = [...arr];
const i = k - 1;
const j = len - k;
if (i !== j) {
[result[i], result[j]] = [result[j], result[i]];
}
return result;
};
ব্যাখ্যা
- k-1: ০-ভিত্তিক ইন্ডেক্সে রূপান্তর
- len-k: শেষ থেকে k-তমের ইন্ডেক্স
- ES6 সিম্পল:
[a, b] = [b, a]- টেম্প ভেরিয়েবল ছাড়া
উৎপাদন
[ 0, 1, 2, 6, 4, 5, 3, 7, 8, 9 ] [ 0, 1, 7, 6, 4, 5, 3, 2, 8, 9 ]