第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

給定一個數(shù)組,編寫一個返回該數(shù)組所有可能的三元組/序列的函數(shù)?

給定一個數(shù)組,編寫一個返回該數(shù)組所有可能的三元組/序列的函數(shù)?

慕無忌1623718 2022-05-26 14:52:38
例如,給定A = [1, 2, 1, 1],函數(shù)應該返回3。僅創(chuàng)建三個不同的序列:(1, 2, 1), (1, 1, 1) and (2, 1, 1). 這個例子的正確答案是3。給定A = [1, 2, 3, 4],函數(shù)應該返回4。有四種方式:(1, 2, 3), (1, 2, 4), (1, 3, 4) and (2, 3, 4)。給定A = [2, 2, 2, 2],函數(shù)應該返回1。只有一種方法:(2, 2, 2).給定A = [2, 2, 1, 2, 2],函數(shù)應該返回4。有四種方式:(1, 2, 2), (2, 1, 2), (2, 2, 1) and (2, 2, 2)。給定A = [1, 2],函數(shù)應該返回0為以下假設編寫一個有效的算法:N 是 [0..100,000] 范圍內(nèi)的整數(shù);數(shù)組 A 的每個元素都是 [1..N] 范圍內(nèi)的整數(shù)。下面是我的蠻力解決方案!我想知道是否有人有更好更優(yōu)化的解決方案?檢測到此解決方案的時間復雜度: O(N**3*log(N)) or O(N**4)
查看完整描述

2 回答

?
茅侃侃

TA貢獻1842條經(jīng)驗 獲得超21個贊

const theatreTickets = (array) => {

  let combos = []

  if(array.length < 2) {

    combos.length = 0

  }


  for(let i = 0; i <= array.length; i++) {

    for(let j = i + 1; j <= array.length - 1; j++) {

      for(let k = j + 1; k <= array.length - 1; k++) {

        combos.push([array[i], array[j], array[k]])

      }

    }

  }

  combos = Array.from(new Set(combos.map(JSON.stringify)), JSON.parse)

  return combos.length

}



console.log(theatreTickets([1, 2, 1, 1])) // Should Be 3


查看完整回答
反對 回復 2022-05-26
?
慕的地8271018

TA貢獻1796條經(jīng)驗 獲得超4個贊

我認為你需要組合,組合和獨特的算法。它會起作用的。示例如下。


function combine(items, numSubItems) {

        var result = [];

        var indexes = new Array(numSubItems);

        for (var i = 0 ; i < numSubItems; i++) {

            indexes[i] = i;

        }

        while (indexes[0] < (items.length - numSubItems + 1)) {

            var v = [];

            for (var i = 0 ; i < numSubItems; i++) {

                v.push(items[indexes[i]]);

            }

            result.push(v);

            indexes[numSubItems - 1]++;

            var l = numSubItems - 1; // reference always is the last position at beginning

            while ( (indexes[numSubItems - 1] >= items.length) && (indexes[0] < items.length - numSubItems + 1)) {

                l--; // the last position is reached

                indexes[l]++;

                for (var i = l +1 ; i < numSubItems; i++) {

                    indexes[i] = indexes[l] + (i - l);

                }

            }        

        }

        return result;

    }


    var combinations = combine([1,2,1,1], 3);

    console.log([...new Set(combinations.map(x => x.join(",")))]);

    combinations = combine([1,2,3,4], 3);

    console.log([...new Set(combinations.map(x => x.join(",")))]);


查看完整回答
反對 回復 2022-05-26
  • 2 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號