建設(shè)一個(gè)廣告聯(lián)盟的網(wǎng)站上海城市分站seo
Leetcode
- Leetcode -495.提莫攻擊
- Leetcode - 496.下一個(gè)更大的元素Ⅰ
Leetcode -495.提莫攻擊
題目:在《英雄聯(lián)盟》的世界中,有一個(gè)叫 “提莫” 的英雄。他的攻擊可以讓敵方英雄艾希(編者注:寒冰射手)進(jìn)入中毒狀態(tài)。
當(dāng)提莫攻擊艾希,艾希的中毒狀態(tài)正好持續(xù) duration 秒。
正式地講,提莫在 t 發(fā)起攻擊意味著艾希在時(shí)間區(qū)間[t, t + duration - 1](含 t 和 t + duration - 1)處于中毒狀態(tài)。
如果提莫在中毒影響結(jié)束 前 再次攻擊,中毒狀態(tài)計(jì)時(shí)器將會(huì) 重置 ,在新的攻擊之后,中毒影響將會(huì)在 duration 秒后結(jié)束。
給你一個(gè) 非遞減 的整數(shù)數(shù)組 timeSeries ,其中 timeSeries[i] 表示提莫在 timeSeries[i] 秒時(shí)對(duì)艾希發(fā)起攻擊,以及一個(gè)表示中毒持續(xù)時(shí)間的整數(shù) duration 。
返回艾希處于中毒狀態(tài)的 總 秒數(shù)。
示例 1:
輸入:timeSeries = [1, 4], duration = 2
輸出:4
解釋:提莫攻擊對(duì)艾希的影響如下:
- 第 1 秒,提莫攻擊艾希并使其立即中毒。中毒狀態(tài)會(huì)維持 2 秒,即第 1 秒和第 2 秒。
- 第 4 秒,提莫再次攻擊艾希,艾希中毒狀態(tài)又持續(xù) 2 秒,即第 4 秒和第 5 秒。
艾希在第 1、2、4、5 秒處于中毒狀態(tài),所以總中毒秒數(shù)是 4 。
示例 2:
輸入:timeSeries = [1, 2], duration = 2
輸出:3
解釋:提莫攻擊對(duì)艾希的影響如下:
- 第 1 秒,提莫攻擊艾希并使其立即中毒。中毒狀態(tài)會(huì)維持 2 秒,即第 1 秒和第 2 秒。
- 第 2 秒,提莫再次攻擊艾希,并重置中毒計(jì)時(shí)器,艾希中毒狀態(tài)需要持續(xù) 2 秒,即第 2 秒和第 3 秒。
艾希在第 1、2、3 秒處于中毒狀態(tài),所以總中毒秒數(shù)是 3 。
思路是判斷相鄰的兩次攻擊時(shí)間是否小于duration(假設(shè)cnt統(tǒng)計(jì)總的中毒時(shí)間),若小于duration,cnt就加上兩次攻擊時(shí)間的差;否則,cnt加上duration;注意最后還要加上duration,因?yàn)樽詈蟮囊淮喂魰r(shí)間還沒算上;
int findPoisonedDuration(int* timeSeries, int timeSeriesSize, int duration){int cnt = 0;for (int i = 1; i < timeSeriesSize; i++){//判斷相鄰兩次提莫攻擊的時(shí)間點(diǎn)是否小于duration,//例如 1和2 ,第一秒艾希被攻擊,第二秒也被攻擊,那么相當(dāng)于在第1秒到第2秒的過程中只中毒1秒鐘;第二秒之后的另外判斷;//如果相鄰兩個(gè)攻擊時(shí)間大于duration,cnt就加上durationif (timeSeries[i] - timeSeries[i - 1] < duration){cnt += timeSeries[i] - timeSeries[i - 1];}else{cnt += duration;}}//最后還要加上duration,因?yàn)樽詈笠淮伪还艉蟮闹卸緯r(shí)間還沒算上return cnt + duration;}
Leetcode - 496.下一個(gè)更大的元素Ⅰ
題目:nums1 中數(shù)字 x 的 下一個(gè)更大元素 是指 x 在 nums2 中對(duì)應(yīng)位置 右側(cè) 的 第一個(gè) 比 x 大的元素。
給你兩個(gè) 沒有重復(fù)元素 的數(shù)組 nums1 和 nums2 ,下標(biāo)從 0 開始計(jì)數(shù),其中nums1 是 nums2 的子集。
對(duì)于每個(gè) 0 <= i < nums1.length ,找出滿足 nums1[i] == nums2[j] 的下標(biāo) j ,
并且在 nums2 確定 nums2[j] 的 下一個(gè)更大元素 。如果不存在下一個(gè)更大元素,那么本次查詢的答案是 - 1 。
返回一個(gè)長(zhǎng)度為 nums1.length 的數(shù)組 ans 作為答案,滿足 ans[i] 是如上所述的 下一個(gè)更大元素 。
示例 1:
輸入:nums1 = [4, 1, 2], nums2 = [1, 3, 4, 2].
輸出:[-1, 3, -1]
解釋:nums1 中每個(gè)值的下一個(gè)更大元素如下所述:
- 4 ,用加粗斜體標(biāo)識(shí),nums2 = [1, 3, 4, 2]。不存在下一個(gè)更大元素,所以答案是 - 1 。
- 1 ,用加粗斜體標(biāo)識(shí),nums2 = [1, 3, 4, 2]。下一個(gè)更大元素是 3 。
- 2 ,用加粗斜體標(biāo)識(shí),nums2 = [1, 3, 4, 2]。不存在下一個(gè)更大元素,所以答案是 - 1 。
示例 2:
輸入:nums1 = [2, 4], nums2 = [1, 2, 3, 4].
輸出:[3, -1]
解釋:nums1 中每個(gè)值的下一個(gè)更大元素如下所述:
- 2 ,用加粗斜體標(biāo)識(shí),nums2 = [1, 2, 3, 4]。下一個(gè)更大元素是 3 。
- 4 ,用加粗斜體標(biāo)識(shí),nums2 = [1, 2, 3, 4]。不存在下一個(gè)更大元素,所以答案是 - 1 。
思路是遍歷兩個(gè)數(shù)組,先找到兩個(gè)數(shù)組相同的元素,找到相同的元素后,再繼續(xù)在nums2數(shù)組往后找大于它們相同元素的元素,找到就放入返回?cái)?shù)組,跳出循環(huán);找不到就把-1放進(jìn)去;
int* nextGreaterElement(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){int* ans = (int*)malloc(sizeof(int) * nums1Size);*returnSize = nums1Size;for (int i = 0; i < nums1Size; i++){int flag = 1;for (int j = 0; j < nums2Size; j++){//先找到兩個(gè)數(shù)組相同的元素if (nums1[i] == nums2[j] && flag){flag = 0;}//找到相同的元素后,再繼續(xù)往后找大于它們相同元素的元素,找到就放入返回?cái)?shù)組,跳出循環(huán)else if (nums2[j] > nums1[i] && flag == 0){ans[i] = nums2[j];break;}//沒找到相同的元素,或者沒找到相同的元素后沒找到下一個(gè)比它大的元素if (j == nums2Size - 1){ans[i] = -1;}}}return ans;}