LeetCode 貪心演算法1

2021-10-11 01:12:17 字數 1773 閱讀 3044

**題目:**如果連續數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為擺動序列。第乙個差(如果存在的話)可能是正數或負數。少於兩個元素的序列也是擺動序列。

例如, [1,7,4,9,2,5] 是乙個擺動序列,因為差值 (6,-3,5,-7,3) 是正負交替出現的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是擺動序列,第乙個序列是因為它的前兩個差值都是正數,第二個序列是因為它的最後乙個差值為零。

給定乙個整數序列,返回作為擺動序列的最長子序列的長度。 通過從原始序列中刪除一些(也可以不刪除)元素來獲得子串行,剩下的元素保持其原始順序。

**思路:**使用狀態機的方式,設定三個狀態:begin,up,down:

1、定義返回長度result = 1;設定狀態變數flag首先為begin,

2、然後迴圈遍歷陣列a長度-1;第一次比較a[0]和a[1],如果a[1]>a[0]則說明此時的狀態為up,即公升序,然後將狀態flag更改為up,長度+1,break結束本次迴圈,第二次進入up狀態去判斷a[2]和a[1],如果依然是公升序,則不改變狀態,break結束,如果是降序,即a[2]class

solution

int result =1;

int flag = begin;

for(

int i=

1;i(nums[i]

-nums[i-1]

<0)

break

;case up:

if(nums[i]

-nums[i-1]

<0)

break

;case down:

if(nums[i]

-nums[i-1]

>0)

break;}

}return result;

}}**題目:**假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。

對每個孩子 i,都有乙個胃口值 g[i],這是能讓孩子們滿足胃口的餅乾的最小尺寸;並且每塊餅乾 j,都有乙個尺寸 s[j] 。如果 s[j] >= g[i],我們可以將這個餅乾 j 分配給孩子 i ,這個孩子會得到滿足。你的目標是盡可能滿足越多數量的孩子,並輸出這個最大數值。

思路:

1、將存放孩子胃口的g陣列和糖果分量的s陣列公升序排序;

2、然後使用child指標指向g陣列,每當乙個孩子被滿足,則child++;

使用candy指標指向s陣列,使用完乙個糖果,則candy++;

3、最小的糖國開始遍歷,如果不能滿足最小的孩子,則該糖果丟棄(因為最小的胃口都不滿足,後面更不能滿足),candy++;如果孩子被滿足,candy++,child++;

class

solution

else

}return child;

}public

void

sort

(int

a,int low,

int high)

i = low;

j = high;

int temp = a[low]

;while

(iwhile

(a[i]

<=temp&&iif(i} a[low]

= a[i]

; a[i]

= temp;

sort

(a,low,i-1)

;sort

(a,i+

1,high);}

}

貪心演算法(leetcode)

1 分糖果 455 用最小的糖果大小滿足需求最小的孩子 class solution else return count 2 搖擺序列 376 遍歷一次,儲存乙個狀態,如果狀態為上公升,變為下降,則長度 1,下降變上公升 1 class solution def wigglemaxlength se...

LeetCode 貪心演算法

12.15 135.12.21 435.假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。對每個孩子 i,都有乙個胃口值 g i 這是能讓孩子們滿足胃口的餅乾的最小尺寸 並且每塊餅乾 j,都有乙個尺寸 s j 如果 s j g i 我們可以將這個餅乾 j 分配給孩...

leetcode 貪心演算法

貪心演算法中,是以自頂向下的方式使用最優子結構,貪心演算法會先做選擇,在當時看起來是最優的選擇,然後再求解乙個結果的子問題。貪心演算法是使所做的選擇看起來都是當前最佳的,期望通過所做的區域性最優選擇來產生乙個全域性最優解 如最小生成樹 dijkstra單源最短路徑 貪心選擇性質 所謂貪心選擇性質是指...