第一周刷題總結
#leetcode
#陣列的遍歷
本週所做的陣列型別題目大多是關於陣列遍歷,統計陣列中的元素的。
一、 485 最大連續1的個數
題目詳情:
給定乙個二進位制陣列, 計算其中最大連續1的個數。
示例 :
輸入: [1,1,0,1,1,1]
輸出: 3
解釋: 開頭的兩位和最後的三位都是連續1,所以最大連續1的個數是 3.
int
findmaxconsecutiveones
(int
* nums,
int numssize)
else
if(l>max)
}return max;
}
二、 495 提莫攻擊
在《英雄聯盟》的世界中,有乙個叫 「提莫」 的英雄,他的攻擊可以讓敵方進入中毒狀態。現在,給出提莫對艾希的攻擊時間序列和提莫攻擊的中毒持續時間,你需要輸出艾希的中毒狀態總時長。
示例:輸入: [1,4], 2
輸出: 4
原因: 第 1 秒初,提莫開始對艾希進行攻擊並使其立即中毒。中毒狀態會維持 2 秒鐘,直到第 2 秒末結束。
第 4 秒初,提莫再次攻擊艾希,使得艾希獲得另外 2 秒中毒時間。
所以最終輸出 4 秒。
int
findpoisonedduration
(int
* timeseries,
int timeseriessize,
int duration)
else
}return count+duration;
}
三、 414 第三大的數
給定乙個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。要求演算法時間複雜度必須是o(n)。
示例 1:
輸入: [3, 2, 1]
輸出: 1
解釋: 第三大的數是 1.
示例 2:
輸入: [1, 2]
輸出: 2
解釋: 第三大的數不存在, 所以返回最大的數 2 .
*此題用到了三指標思想,在陣列的遍歷過程中,不斷地將第
一、第二、第三大的數進行替換,當在陣列中找到了大於最大數的值,立即將第三大的數指向當前第二大的數,第二大的數指向當前第一大的數,第一大的數指向此時陣列的值。同理,當此時陣列中的值在第一第二大的數之間,將第三大的數指向當前第二大的數,第二大的數指向當前陣列的值,第一大的數保持不變。
int
thirdmax
(int
* nums,
int numssize)
else
if(nums[i]
>q)
else
if(nums[i]
>r)}if
(r==long_min)
return r;
}
四、 628 三個數的最大乘積
給定乙個整型陣列,在陣列中找出由三個數組成的最大乘積,並輸出這個乘積。
示例 1:
輸入: [1,2,3]
輸出: 6
示例 2:
輸入: [1,2,3,4]
輸出: 24
注意:陣列中所有的元素範圍是[-1000, 1000],是存在負數的。
*此題任然會用多指標思想求出陣列中最大或最小的幾個數,不同的是,前幾大的數和前幾小的數可以是相等的。最後結果1:兩個最小的負數乘以乙個最大的正數;結果2:三個最大的正數相乘,取其中較大者即可。
int
maximumproduct
(int
* nums,
int numssize)
else
if(nums[i]
>=p && nums[i]
}int a=p,b=p,c=p;
for(i=
0;i)else
if(nums[i]
>=b)
else
if(nums[i]
>c)
} sum1 = p*q*a;
//兩個最小的負數乘以乙個最大的數
sum2 = a*b*c;
//三個最大的數相乘
return sum1>sum2 ? sum1 : sum2;
}
2019暑假刷題筆記 樹的遍歷 總結
關於樹這一塊,前期沒有做乙個學習的緒論,因為時間來不及了。在總結上回顧一下這些題目的一些特點 樹的遍歷的是資料結構樹這一塊中的一部分。樹的遍歷和二叉樹的遍歷本質上相同。二叉樹用指標也可以做,但是在考試中用靜態陣列處理樹更有優勢 樹的遍歷一般的模板是 輸入 遞迴 設定邊界 遞迴兩步 輸出 輸入形式的 ...
演算法刷題及總結 陣列篇
演算法總結 leetcode題目35 搜尋插入位置 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 解法一 暴力法 時間複雜度 o n ...
2020 01 24 陣列刷題
題目說明 給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。初始化 nums1 和 nums2 的元素數量分別為 m 和 n 你可以假設 nums1 的空間大小等於 m n,這樣它就有足夠的空間儲存來自 nums2 的元素...