जहां मुझे एक सरणी [-1,4,-3,5,6,9,-2] दी गई है, उसे पूरा करने के लिए मेरे पास एक चुनौती है और मुझे इस क्रम में संख्याओं को क्रमबद्ध करने वाली एक नई सरणी प्राप्त करने की आवश्यकता है: [firstGreatest, firstLowest, secondGreatest, secondLowest ...and so on]। ऋणात्मक और धनात्मक संख्याएँ भिन्न राशि हो सकती हैं, जैसे 4 धनात्मक, 2 ऋणात्मक।

मैंने अभी तक यही कोशिश की है, लेकिन बेहतर समाधान के बारे में नहीं सोच सकता।

let arr = [-1, 2, -5, 3, 4, -2, 6];


function someArray(ary) {
  const sorted = ary.sort((a, b) => a - b)

  const highest = sorted.filter(num => num > 0).sort((a, b) => b - a)
  const lowest = sorted.filter(num => num < 0).sort((a, b) => b - a)

  let copy = highest
  for (let i = 0; i < highest.length; i++) {
    for (let j = i; j < lowest.length; j++) {
      if ([i] % 2 !== 0) {
        copy.splice(1, 0, lowest[j])
      }
    }
  }
}
console.log(arr)
someArray(arr)
console.log(arr)
1
Coman Marian 13 जुलाई 2021, 11:14

4 जवाब

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

आप दो पॉइंटर्स एल्गोरिथम के साथ इस समस्या को आसानी से हल कर सकते हैं।

ओ (एन लॉग एन) छँटाई के लिए

O(n) result में मान जोड़ने के लिए।

दो-चर i और j लें,

i क्रमबद्ध सरणी की शुरुआत की ओर इशारा करता है

j क्रमबद्ध सरणी के अंत की ओर इशारा करता है

अब बस अंतिम result में वैकल्पिक रूप से क्रमबद्ध सरणी का मान जोड़ें

let arr = [-1, 2, -5, 3, 4, -2, 6];

function someArray(ary) {
  const sorted = arr.sort((a, b) => b - a);
  
  // declaration
  const result = [];
  let i = 0,
    j = sorted.length - 1,
    temp = true;
  
  // Algorithm
  while (i <= j) {
    if (temp) {
      result.push(sorted[i]);
      i++;
    } else {
      result.push(sorted[j]);
      j--;
    }
    temp = !temp;
  }
  return result;
}

console.log(someArray(arr));
.as-console-wrapper { max-height: 100% !important; top: 0; }
2
decpk 13 जुलाई 2021, 08:26

सामान्य विचार सरणी (उच्चतम से निम्नतम) को क्रमबद्ध करना है, फिर सरणी खाली होने तक पहला और अंतिम तत्व चुनें। इसे करने का एक तरीका यह हो सकता है:

const input = [-1, 2, -5, 3, 4, -2, 6];

function someArray(arr) {
  // sort the original array from highest to lowest
  const sorted = arr.sort((a, b) => b - a);

  const output = []

  while (sorted.length > 0) {
    // remove the first element of the sorted array and push it into the output
    output.push(...sorted.splice(0, 1));
    // [check to handle arrays with an odd number of items]
    // if the sorted array still contains items 
    // remove also the last element of the sorted array and push it into the output
    if (sorted.length > 0) output.push(...sorted.splice(sorted.length - 1, 1))
  }

  return output;
}

// test
console.log(`input: [${input.join(',')}]`);
console.log(`input (sorted desc): [${input.sort((a, b) => b - a).join(',')}]`)
console.log(`output: [${someArray(input).join(',')}]`);
1
secan 13 जुलाई 2021, 08:56

यह एक सरल और छोटी विधि है:

function makearray(ar) {
  ar = points.sort(function(a, b) {
    return b - a
  })
  let newarray = []
  let length = ar.length
  for (let i = 0; i < length; i++) {
    if (i % 2 == 0) {
      newarray.push(ar[0])
      ar.splice(0, 1)
    } else {
      newarray.push(ar[ar.length - 1])
      ar.splice(ar.length - 1, 1)
    }
  }
  return newarray
}

const points = [-1, 2, -5, 3, 4, -2, 6]
console.log(makearray(points))
0
Keshav Bajaj 13 जुलाई 2021, 08:32

आप सरणी और pop या shift को तब तक सॉर्ट कर सकते हैं जब तक आपके पास कोई और आइटम न हो।

function greatestLowest(array) {
    let temp = [...array].sort((a, b) => a - b),
        m = 'shift',
        result = [];

    while (temp.length) result.push(temp[m = { pop: 'shift', shift: 'pop' }[m]]());
    return result;
}

console.log(...greatestLowest([-1, 2, -5, 3, 4, -2, 6]));
2
Nina Scholz 13 जुलाई 2021, 08:31