मुझे एक ऐसा फ़ंक्शन बनाने की ज़रूरत है जो दिए गए सरणी में सभी तत्वों को ढूंढता है, जैसे कि प्रत्येक तत्व इसके दाईं ओर सभी तत्वों से बड़ा होता है।

उदाहरण

leader([2, 3, 20, 15, 8, 3]) ➞ [20, 15, 8, 3]

leader([2, 3, 20, 15, 8, 25, 3]) ➞ [25, 3]

यहाँ मेरा कार्य है:

function leader( array ) {
  return array.slice(array.indexOf(Math.max(...array)))
  }
console.log(leader([8, 7, 1, 2, 10, 3, 5]))

परीक्षण जो मुझे विफल करता है वह तब होता है जब इस सरणी को कहा जाता है:

leader([8, 7, 1, 2, 10, 3, 5]) // "Expected : [10,5], Received : [10,3,5]"
-1
Yoël Zerbib 1 पद 2020, 00:15

2 जवाब

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

केवल अधिकतम तत्व का सूचकांक खोजना पर्याप्त नहीं है, क्योंकि अधिकतम तत्व के बाद आने वाले तत्व घटते क्रम में नहीं हो सकते हैं। इसके बजाय .filter का प्रयोग करें।

function leader( array ) {
  return array.filter(
    (num, i) => array.slice(i + 1).every(
      otherNum => num > otherNum
    )
  );
}
console.log(leader([8, 7, 1, 2, 10, 3, 5]))
3
CertainPerformance 1 पद 2020, 00:18

आप दाईं ओर से कम कर सकते हैं।

यह दृष्टिकोण केवल एक लूप लेता है।

function leader( array ) {
    return array.reduceRight((r, v) => {
        if (!r.length || v > r[0]) r.unshift(v);
        return r;
    }, []);
}

console.log(leader([8, 7, 1, 2, 10, 3, 5]))
1
Nina Scholz 1 पद 2020, 00:21