最小堆pop最小的,最大堆pop最大的
設計乙個演算法,找出陣列中最小的k個數。以任意順序返回這k個數均可
//最大堆
class solution
while(!maxheap.empty())
return out;}};
在未排序的陣列中找到第k個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。
//最小堆
class solution
return minheap.top();}};
給定乙個整型陣列, 你的任務是找到所有該陣列的遞增子串行,遞增子串行的長度至少是2。
示例:輸入: [4, 6, 7, 7]
輸出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]
那如何保證沒有重複呢?我們需要給「不選擇」做乙個限定條件,只有當當前的元素不等於上乙個選擇的元素的時候,才考慮不選擇當前元素,直接遞迴後面的元素。因為如果有兩個相同的元素,我們會考慮這樣四種情況:【從小(兩個連續數)入手考慮重複性問題】
前者被選擇,後者被選擇
前者被選擇,後者不被選擇
前者不被選擇,後者被選擇
前者不被選擇,後者不被選擇
其中第二種情況和第三種情況其實是等價的,我們這樣限制之後,捨棄了第二種,保留了第三種,於是達到了去重的目的。
這個去重我喜歡
class solution
return;
}if (nums[cur] >= last)
if (nums[cur] != last)
}vector> findsubsequences(vector& nums)
};
兩個(具有不同單詞的)文件的交集(intersection)中元素的個數除以並集(union)中元素的個數,就是這兩個文件的相似度。例如, 和 的相似度是 0.4,其中,交集的元素有 2 個,並集的元素有 5 個。給定一系列的長篇文件,每個文件元素各不相同,並與乙個 id 相關聯。它們的相似度非常「稀疏」,也就是說任選 2 個文件,相似度都很接近 0。請設計乙個演算法返回每對文件的 id 及其相似度。只需輸出相似度大於 0 的組合。請忽略空文件。為簡單起見,可以假定每個文件由乙個含有不同整數的陣列表示。
輸入為乙個二維陣列 docs,docs[i] 表示 id 為 i 的文件。返回乙個陣列,其中每個元素是乙個字串,代表每對相似度大於 0 的文件,其格式為 ,: ,其中 id1 為兩個文件中較小的 id,similarity 為相似度,精確到小數點後 4 位。以任意順序返回陣列均可。
示例:輸入:
[[14, 15, 100, 9, 3],
[32, 1, 9, 3, 5],
[15, 29, 2, 6, 8, 7],
[7, 10]
]輸出:
["0,1: 0.2500",
"0,2: 0.1000",
"2,3: 0.1429"
]這個題來學習雜湊挺好的
class solution
}return result;}};
在乙個陣列 nums 中除乙個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。
示例 1:
輸入:nums = [3,4,3,3]
輸出:4
示例 2:
輸入:nums = [9,1,7,9,7,9,7]
輸出:1
兩位 two one表示各bit位出現次數,出現三次剛好恢復至0
關鍵設計狀態機
有些數的素因子只有 3,5,7,請設計乙個演算法找出第 k 個數。注意,不是必須有這些素因子,而是必須不包含其他的素因子。例如,前幾個數按順序應該是 1,3,5,7,9,15,21。
示例 1:
輸入: k = 5
輸出: 9
class solution
//二分搜尋
ll binary_search(ll low,ll high,int a,int b,int c,ll n)
//求最小公倍數:兩數乘積除以最大公約數
ll mcm(ll a,ll b)
return multi/a;}};
輸入:a = [1,1,2,2,3,3,4,4,5,5], target = 8
輸出:20
解釋:按值列舉(a[i],a[j],a[k]):
(1, 2, 5) 出現 8 次;
(1, 3, 4) 出現 8 次;
(2, 2, 4) 出現 2 次;
(2, 3, 3) 出現 2 次。
三指標,寫的比較稀碎
class solution
//最終答案就是考慮前n個數時,選擇其中3個數,組成target大小的方案數
return dp[n][3][target];}};
有乙個二維矩陣 grid ,每個位置要麼是陸地(記號為 0 )要麼是水域(記號為 1 )。
我們從一塊陸地出發,每次可以往上下左右 4 個方向相鄰區域走,能走到的所有陸地區域,我們將其稱為一座「島嶼」。
如果一座島嶼 完全 由水域包圍,即陸地邊緣上下左右所有相鄰區域都是水域,那麼我們將其稱為 「封閉島嶼」。
請返回封閉島嶼的數目。
示例 1:
輸入:grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]]
輸出:2
解釋:灰色區域的島嶼是封閉島嶼,因為這座島嶼完全被水域包圍(即被 1 區域包圍)。
bfs,廣度優先搜尋,把遍歷過的點置1.
class solution
if(curpos.first+1-1 && grid[curpos.first][curpos.second-1]==0)
if(curpos.second+1給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。
示例 :
給定二叉樹
1/ \
2 3
/ \
4 5
返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。
/*** definition for a binary tree node.
* struct treenode
* };
*/class solution
if(mid>target/mid)
erfen(left,mid-1,target);
else
erfen(mid+1,right,target);
}int mysqrt(int x)
private:
int res;
};
常見面試題整理
題目 如下為型別cmystring的宣告,請為該型別新增賦值運算子函式。class cmystring 注意點 1.返回值是否為該型別的引用。如果為該型別引用則可連續賦值。如果返回void,則無法通過編譯 2.傳入引數是否宣告為常量引用。如果傳入引數不是常量引用,則會有一次非必要的拷貝構造函式呼叫 ...
常見面試題整理1
面試題整理1 相同點 都是繼承collection介面 不同點 1.list 元素存放有順序,元素可重複 set 元素存放無順序,元素不可重複 2.list 支援for迴圈,也可以用迭代器 set 只能用迭代器,因為它是無序的,無法通過下標獲取元素 3.list和陣列相似,查詢元素效率高,插入刪除元...
C C 常見面試題整理
事情皆有因果。卻有未必好因造好果,看你是短看還是長看。從概率和從極長遠來看,當然是好人好報,但是具體短期的隨機性就無法 了。在該函式前新增extern c 宣告。由於編譯後的名字不同,c 程式不能直接呼叫c 函式。a c 中的類預設的成員是私有的,struct預設的是共有的。b c 中的類可以定義成...