每天一道LeetCode-----計算小於n的素數個數
Count Primes
計算小於n的素數個數
思路:
如果一個數m是素數,那麼所有m * k就都不是素數。另外2是最小的素數
程式碼如下
class Solution {
public:
int countPrimes(int n) {
vector<int> nums(n 1);
int count{0};
for(int i = 2; i < n; ++i) {
if(nums[i]) {
++count;
for (int j = 2; i * j < n; ++j) {
nums[i * j] = 0;
}
}
}
return count;
}
};
相關推薦
每天一道LeetCode-----計算小於n的素數個數
Count Primes 計算小於n的素數個數 思路: 如果一個數m是素數,那麼所有m * k就都不是素數。另外2是最小的素數 程式碼如下 class Solution { pub
每天一道LeetCode-----計算從二維陣列的左上角到達右下角的所有路徑數及最短的那條,如果存在障礙物時又是多少
Unique Paths 原題連結Unique Paths 計算從左上角有多少條不同的路徑可以到達右下角,移動方向只能是向右和向下。 對於每個位置,都有兩種移動的可能,即向右移動和向下移動。可以用深度優先(dfs)解決,同時為了解決重複計算,可以用動態
每天一道LeetCode-----計算二叉樹的最大路徑和,路徑只需要從一個節點到達另一個節點,無其他要求
Binary Tree Maximum Path Sum 給定一個二叉樹,計算二叉樹中最長的路徑和,路徑只需要從一個節點到另一個節點,不需要經過根節點,也不需要從葉子節點開始,但至少包含一個節點 乍一看,二叉樹上任意一條路徑都有可能是最後的結果,而解
每天一道LeetCode-----計算二叉樹的最大深度及最小深度,判斷二叉樹是否是高度平衡二叉樹
Maximum Depth of Binary Tree 計算給定二叉樹的最大深度,最大深度指從根節點到葉子節點的最長路徑上的節點個數 注意葉子節點的定義,只有左右兩個子節點都是空節點時,該節點才被稱作葉子節點 對於任意一個節點,它的深度是由它左右兩個
每天一道LeetCode-----計算一個直方圖空隙的容量(如果裝水能裝多少)
Trapping Rain Water 原題連結Trapping Rain Water 給定一序列,表示一個直方圖每個柱的高度(圖中黑色部分),計算這個直方圖可以儲存的容量(圖中淺藍色部分) 直觀的想法可能是直接求容量,比如說計算高度為2和高度為3的兩
每天一道LeetCode-----計算字串s中有多少個子序列和字串t相等
Distinct Subsequences 判斷字串s中有多少個子序列和t相等,一個字串的子序列是將字串中若干字元刪除後形成的字串 因為子序列中字元的順序是固定的,所以不能採用滑動窗(滑動窗常用於解決只要求個數不要求順序的問題)。 另外,對於源字串
每天一道LeetCode-----生成由[1 : n]這n個數組成的所有二叉搜尋樹
Unique Binary Search Trees 給定數值n,計算有多少種不同的二叉搜尋樹能夠儲存1,2,...,n這n個數 二叉搜尋樹滿足的條件 當前根節點的值大於左子樹節點的值 當前根節點的值小於右子樹節點的值 左右子樹同樣是二叉搜尋樹
每天一道LeetCode-----買賣商品問題,計算最大利潤,分別有一次交易,兩次交易,多次交易的情況
Best Time to Buy and Sell Stock 給定一個價格序列prices,其中prices[i]代表第i天商品的價格,商家需要在某一天買入,然後在之後的某一天出售,計算可以獲得的最大利潤 本質就是計算prices[i]−price
每天一道LeetCode-----將字串的連續相同的字符合併成一個字元後加個數
Count and Say 原題連結 Count and Say 求出第n個表示式,第n個表示式由第n-1個表示式的讀音構成。如 第3個表示式為21,讀作1個2,1個1,所以第4個表示式就是1211。 第4個表示式讀作1個1,1個2,2個1,所以第5
每天一道LeetCode-----判斷陣列中是否存在兩個位置上面的值相等並且下標的差小於某個值
判斷給定陣列中是否存在i和j,使得nums[i] == nums[j]並且j - i <= k 只需要儲存每個數最後出現的下標,當再次遇到這個數時,進行比較,如果滿足條件則返回,否則更新
每天一道LeetCode-----刪除連結串列倒數第n個節點
原題連結Remove Nth Node From End of List 意思是給定一個連結串列,要求刪除倒數第n個節點,返回連結串列頭,複雜度在O(n) 思路就是找到倒數第n個和倒數第n+
每天一道LeetCode-----陣列序列,每個元素的值表示最多可以向後跳多遠,計算最少跳多少次可以到達末尾
Jump Game II 原題連結Jump Game II 給定一個數組序列,序列中每一個元素的值表示最多可以向後跳多遠,初始時從下標0開始,計算最少跳多少次可以到達末尾的元素位置。 剛開始是想用深度優先(dfs)+ 動態規劃解決的,結果竟然超時了,看
每天一道LeetCode-----對錶達式新增括號並求值,返回所有可能的計算結果
Different Ways to Add Parentheses 給出一個只有加,減,乘運算的表示式,要求在這個表示式中新增合理的括號,返回所有填上括號後的計算結果 考慮每一個操作符(+, -, *),每一個操作符實際上是將表示式分成了左右兩部分。
每天一道LeetCode-----尋找二叉搜尋樹中第k小的元素
Kth Smallest Element in a BST 給頂一個二叉搜尋樹的根節點,找到這棵數第k小的值 兩種方法 遞迴法的中序遍歷 迭代法的中序遍歷 遞迴法,常規的中序遍歷
每天一道LeetCode-----在字串s中找到最短的包含字串t中所有字元的子串,子串中字元順序無要求且可以有其他字元
Minimum Window Substring 要求在源字串s中找到長度最短的子串,這個子串包含目標字串t中的所有字元,字元順序沒有要求。 注意在找到的子串中可以包含t中沒有的字元。 乍一看是滑動窗的問題,如果題目要求是”在s中找到子串t,t中字
每天一道LeetCode-----找到二叉樹所有和為給定值的路徑
Path Sum 判斷二叉樹中有沒有一條從根節點到葉子節點的路徑元素和為給定值 只需要遍歷所有路徑即可,需要注意的是對葉子節點的判斷,需要滿足左右兩個節點都是空的條件時才為葉子節點 程式碼如下 /** * Definition for a
每天一道LeetCode-----尋找給定字串中重複出現的子串
Repeated DNA Sequences 在給定字串中尋找重複出現的序列,每個序列長度為10 可以採用unordered_map記錄每個序列出現的個數,將出現超過一次的新增到結果集中 程式碼如下 class Solution { publ
每天一道LeetCode-----找到給定陣列中第三大的值
要求找到給定陣列中第三大的數。其中第一大的數,第二大的數,第三大的數互不相同,即嚴格的小於關係。並且規定時間複雜度是O(n)。另外如果找不到第三大的數,則返回陣列中第一大的數 可以用三個變數first, second, third分別記錄第一大第二大以
每天一道LeetCode-----找出給定序列的所有子序列
Subsets 給定一個數組序列,找出所有子序列 深度優先掃一遍:) class Solution { public: vector<vector<int>> subsets(vector<int>&
leetcode Count Primes 統計 素數 個數 超時 解決方案
Count Primes Description: Count the number of prime numbers less than a non-negative number, n. 方法1 public class CountPrimes {