兩數之和
給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,并返回它們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。
你可以按任意順序返回答案。
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {for(int i = 0 ; i < nums.size() - 1;i++){for(int j = i+1;j < nums.size();j++){if((nums[i] + nums[j])==target){return vector<int>{i,j};}}}return vector<int>{0};}};
字母異位詞分組
給你一個字符串數組,請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。
字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。
最長連續序列
給定一個未排序的整數數組 nums ,找出數字連續的最長序列(不要求序列元素在原數組中連續)的長度。
請你設計并實現時間復雜度為 O(n) 的算法解決此問題。
要在 O(n) 的時間復雜度內找出未排序數組中數字連續的最長序列的長度,我們可以使用哈希表(在 C++ 中為 unordered_set)來實現。基本思路是將所有元素存儲在哈希表中,然后對于哈希表中的每個元素,檢查它是否是連續序列的起點(即檢查哈希表中是否沒有比它小的相鄰元素),然后從這個起點開始向上計數,直到序列斷開。
class Solution {
public:int longestConsecutive(vector<int>& nums) {unordered_set<int> num_set(nums.begin(),nums.end());for(auto i : nums){num_set.insert(i);}int maxlen = 0;for(auto i : num_set){if(num_set.find(i-1)!=num_set.end()){continue;}else{int curnum = i;int len = 1;while(num_set.find(curnum+1)!=num_set.end()){curnum++;len++;}maxlen = max(maxlen,len);}}return maxlen;}
};