Leetcode128 題目總結 hard

2021-07-10 10:16:41 字數 1466 閱讀 5430

the first missing positive  :找第乙個丟失的整數

方法1:從1開始尋找正整數result·,找到就把他交換到nums[i]:同時i回退到result+1,時間複雜度大於o(n) ac

class solution  else  

}return result;}};

方法2:對每乙個大於1的數nums[i],都把他放在nums[num[i]-1]上,最後遍歷  時間複雜度o(n),ac

class solution 

int j=1;

for(j=1; j<=n; j++)

if(nums[j-1]!=j)

break;

return j;}};

解法3:
int firstmissingpositive(int a, int n)

} for(int i=0; i題目:287. find the duplicate number

class solution

}else i=nums.size()-1;

}return 0;}};

題目:

longest consecutive sequence:

尋找給定陣列中的最長連續序列

解法1:先排序,在遍歷  時間複雜度o(nlogn)  

有趣的是:題目要求時間複雜度o(n),但這種方法不但ac。而且時間上比93%的提交都快,相反下一種解法使用hash,時間複雜度理論上看起來o(n),

但卻只比10%的提交快。,所以,只有一種解釋,那就是這種看起來時間複雜度是o(n),實際上,當資料長度很大時,平均時間複雜度是大於o(nlogn)的

如下圖 12ms的是第一種解法,40毫秒的是第二種解法

}};解法2:使用hash 用空間換時間

class solution

int count = 0;

int max = 0;

for(int i = 0;i < num.size();i++)

int curdecrease = num[i] - 1;

while( hashtable.find(curdecrease) != hashtable.end() )

if(count > max)

max = count;

}return max;}};

leetcode128 最長連續序列

給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4,200,1,3,2 輸出 4 解釋 最長連續序列是 1,2,3,4 它的長度為 4。建立乙個dict,如果num不在裡面就檢視左右連續長度,再給num和左右處賦值 class solution...

Leetcode 128 最長連續序列

給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4,200,1,3,2 輸出 4 解釋 最長連續序列是 1,2,3,4 它的長度為 4。複製 這道題目最開始大家想的肯定是sort,然後計數計算最長序列。但是要求時間複雜度為 o n 就不能用so...

LeetCode128 最長連續序列

原題目給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4,200,1,3,2 輸出 4 解釋 最長連續序列是 1,2,3,4 它的長度為 4。題目分析 方法一 排序直接查詢法 先對陣列進行快排,然後從開始開始比較前後兩者是否相差1,相差1則計數...