題目:
編寫一段程式來查詢第n
個超級醜數。
超級醜數是指其所有質因數都是長度為k
的質數列表primes
中的正整數。
思路:用乙個陣列記錄每乙個醜數,取下標
時間複雜度:o(mn),空間複雜度o(m+n),m是質因數陣列的長度
/**
* @param n
* @param primes
* @return
*/var nthsuperuglynumber = function(n, primes) s
* @return
*/var removeduplicateletters = function(s)
res.push(s[i]);
}} return res.join("");
};
題目:
給定乙個字串陣列 words,找到 length(word[i]) * length(word[j]) 的最大值,並且這兩個單詞不含有公共字母。你可以認為每個單詞只包含小寫字母。如果不存在這樣的兩個單詞,返回 0。
思路:首先,對陣列排序,長度大的放前面。這樣可以利用貪心策略減小計算的次數
然後,對每乙個字元用set獲取簡化之後的字母,並排序,記錄每一種組合對應的最大長度,遇到同一種組合時只取長度最大的字串,這樣就能跳過很多輪計算
時間複雜度:o(n2),空間複雜度o(n)
/**
* @param words
* @return
*/const fn = (s) => ;
var maxproduct = function (words)
} for (let i = 0; i < l - 1; i++) $`).size ==
list[i].length + list[j].length) }
} return count;
};
題目:
初始時有 n 個燈泡關閉。 第 1 輪,你開啟所有的燈泡。 第 2 輪,每兩個燈泡你關閉一次。 第 3 輪,每三個燈泡切換一次開關(如果關閉則開啟,如果開啟則關閉)。第 i 輪,每 i 個燈泡切換一次開關。 對於第 n 輪,你只切換最後乙個燈泡的開關。 找出 n 輪後有多少個亮著的燈泡。
思路:這題其實是計算因數的數量。如果某個數有奇數個因數,那麼最後它是亮的。那麼,什麼數的因數是奇數個呢?完全平方數
/**
* @param n
* @return
*/var bulbswitch = function(n)
return v;
};
題目:
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。
你可以認為每種硬幣的數量是無限的。
思路:經典的動態規劃,和揹包問題很像。
用乙個陣列,對於金額為i時的情況:res[i]為此時的最小硬幣個數。
所以,對於面值為n的硬幣,res[i]=res[i-n]+1.並且要列舉所有的硬幣的可能(注意i-n不能小於0)
/**
* @param coins
* @param amount
* @return
*/var coinchange = function(coins, amount) else
} function getc(i)
return res[amount] == infinity ? -1 : res[amount];
};
/**
* @param coins
* @param amount
* @return
*/var coinchange = function(coins, amount)
} return res[amount] == infinity ? -1 : res[amount];
};
刷題記錄23
老師在開學第一天就把所有作業都布置了,每個作業如果在規定的時間內交上來的話才有學分。每個作業的截止日期和學分可能是不同的。例如如果乙個作業學分為 10,要求在 6 天內交,那麼要想拿到這 10 學分,就必須在第 6 天結束前交。每個作業的完成時間都是只有一天。例如,假設有 7 次作業的學分和完成時間...
leetcode刷題記錄
我覺得每天來兩道,練習練習,再看看人家是怎麼優化的。1.給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。c 暴力求解,204ms,9.1m class solution for index,num in enumerate ...
LeetCode刷題記錄
動態規劃和貪心演算法的異同點 class solution throw newruntimeexception 時間複雜度 o n 2 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 o n o n 的時間。因此時間複雜度為 o n 2 需要一種方法,尋找符合要求的元...