zvvq技术分享网

LeetCode Day 贪心算法 第 1 部分(贪心算法的思想)

作者:zvvq博客网
导读455. 分配 Cookie 假设您是一位很棒的父母,想给您的孩子一些饼干。但是,你应该给每个孩子最多一块饼干。 每个孩子 i 都有一个贪婪因子 g[i],这是孩子会满意的 cookie 的最小大小;每

copyright zvvq

455. 分配 Cookie

假设您是一位很棒的父母,想给您的孩子一些饼干。但是,你应该给每个孩子最多一块饼干。 zvvq

每个孩子 i 都有一个贪婪因子 g[i],这是孩子会满意的 cookie 的最小大小;每个 cookie j 的大小为 s[j]。如果 s[j] >= g[i],我们可以将 cookie j 分配给子 i,并且子 i 将是内容。您的目标是最大化您的内容子项的数量并输出最大数量。

内容来自zvvq,别采集哟

示例1:

内容来自zvvq,别采集哟

输入:g = [1,2,3], s = [1,1] zvvq

输出:1 zvvq.cn

说明:您有 3 个孩子和 2 个饼干。 3个孩子的贪婪因子分别是1、2、3。 内容来自zvvq,别采集哟

即使你有 2 个饼干,由于它们的大小都是 1,所以你只能制作贪婪因子为 1 的孩子的内容。 内容来自zvvq

你需要输出1.

本文来自zvvq

示例2:

输入:g = [1,2],s = [1,2,3]

内容来自zvvq,别采集哟

输出:2 本文来自zvvq

说明:您有 2 个孩子和 3 个饼干。 2个孩子的贪婪因子分别是1、2。

zvvq.cn

你有 3 块饼干,它们的大小足以满足所有孩子的需求,

zvvq

你需要输出2.

限制: zvvq好,好zvvq

1 0 1 zvvq好,好zvvq

1

zvvq

2 内容来自samhan

3 内容来自samhan666

4 内容来自samhan666

5

内容来自samhan666

6 内容来自zvvq

7 zvvq

8

本文来自zvvq

9 zvvq好,好zvvq

10

内容来自zvvq

11 内容来自zvvq

12

copyright zvvq

13

内容来自samhan666

14 内容来自zvvq,别采集哟

15 zvvq.cn

16 zvvq

17 zvvq.cn

18 内容来自zvvq,别采集哟

19 zvvq

20

内容来自zvvq

21 内容来自samhan666

22 内容来自zvvq,别采集哟

23

内容来自zvvq,别采集哟

24 内容来自samhan

25

内容来自samhan666

26

本文来自zvvq

27

copyright zvvq

28 内容来自zvvq

29 zvvq

30

zvvq好,好zvvq

31

copyright zvvq

32

zvvq

33 zvvq.cn

34

zvvq.cn

35 zvvq.cn

36

zvvq好,好zvvq

37 内容来自samhan

38

内容来自samhan

39

copyright zvvq

public int findContentChildren(int[] g, int[] s) {

内容来自samhan

// 避免空指针 zvvq好,好zvvq

if(g.length == 0 || s.length ==0){ copyright zvvq

返回0;

copyright zvvq

}

内容来自samhan

// 2 nlogn

内容来自samhan

数组.sort(g); 内容来自zvvq

数组.sort(s);

本文来自zvvq

整数 i = 0;

zvvq好,好zvvq

整数 j = 0; 内容来自samhan666

整数计数=0;

内容来自zvvq,别采集哟

while(i zvvq

<p>时间:n`logn</p>

zvvq

<p>另一个版本的for循环<br> copyright zvvq

`<br> 内容来自zvvq,别采集哟

public int findContentChildren(int[] g, int[] s) {<br> zvvq

// 避免空指针<br>

内容来自zvvq,别采集哟

if(g.length == 0 || s.length ==0){<br> zvvq.cn

返回0;<br> copyright zvvq

}<br> 内容来自samhan666

// 2 nlogn<br>

zvvq.cn

Arrays.sort(g);<br>

内容来自zvvq

Arrays.sort(s);</p>

本文来自zvvq

<pre class="brush:php;toolbar:false"> int j = 0;

内容来自samhan666

整数计数=0; zvvq好,好zvvq

for(int i=0; i<s.length j i>= g[j]){ copyright zvvq

j++; 内容来自samhan666

计数++; zvvq

}

zvvq

}

zvvq

返回计数;   内容来自samhan666

} 内容来自zvvq,别采集哟

</s.length> 内容来自zvvq,别采集哟

` 本文来自zvvq

376. 摆动子序列

摆动序列是连续数字之间的差异严格在正负之间交替的序列。第一个差异(如果存在)可以是正值,也可以是负值。包含一个元素的序列和包含两个不相等元素的序列是简单的摆动序列。 zvvq

例如,[1, 7, 4, 9, 2, 5] 是一个摆动序列,因为差异 (6, -3, 5, -7, 3) 在正负之间交替。

zvvq.cn

相反,[1,4,7,2,5]和[1,7,4,5,5]不是摆动序列。第一个不是因为它的前两个差异是正数,第二个不是因为它的最后一个差异为零。 本文来自zvvq

子序列是通过从原始序列中删除一些元素(可能为零)而获得的,而其余元素仍保持原来的顺序。

给定一个整数数组 nums,返回 nums 的最长摆动子序列的长度。

copyright zvvq

示例1: 内容来自zvvq

输入:nums = [1,7,4,9,2,5] zvvq

输出:6

copyright zvvq

解释:整个序列是一个有差异的摆动序列 (6, -3, 5, -7, 3)。 copyright zvvq

示例2:

输入:nums = [1,17,5,10,13,15,10,5,16,8]

内容来自zvvq,别采集哟

输出:7

内容来自zvvq,别采集哟

说明:有几个子序列可以达到这个长度。

内容来自samhan

一个是 [1, 17, 10, 13, 10, 16, 8],有差异 (16, -7, 3, -3, 6, -8)。 zvvq.cn

示例3:

输入:nums = [1,2,3,4,5,6,7,8,9]

本文来自zvvq

输出:2

限制:

内容来自samhan

1 0 内容来自samhan

跟进:你能在 O(n) 时间内解决这个问题吗?

zvvq

` copyright zvvq

公共 int wiggleMaxLength(int[] nums) { zvvq

if(nums.length == 0){ 内容来自samhan

返回0;

本文来自zvvq

}

内容来自samhan666

整数计数 = 1; 内容来自zvvq,别采集哟

int preFlag = 0; zvvq.cn

int pre = nums[0];

1

zvvq.cn

2 copyright zvvq

3

内容来自samhan

4

zvvq好,好zvvq

5 本文来自zvvq

6

内容来自samhan666

7

zvvq

8

内容来自zvvq

9 内容来自samhan666

10

内容来自samhan666

11

内容来自zvvq

12 zvvq.cn

13

内容来自zvvq

14

内容来自samhan666

15 zvvq

16 zvvq好,好zvvq

17 zvvq.cn

18 zvvq好,好zvvq

19

内容来自samhan666

20 内容来自samhan

21

内容来自zvvq,别采集哟

22

内容来自zvvq,别采集哟

23 zvvq好,好zvvq

24

本文来自zvvq

25

内容来自zvvq,别采集哟

26 内容来自zvvq,别采集哟

27

zvvq

28 内容来自samhan

29

内容来自zvvq

30 zvvq好,好zvvq

31

内容来自zvvq,别采集哟

32

内容来自samhan

33 内容来自zvvq

34

zvvq好,好zvvq

35 copyright zvvq

36 内容来自zvvq,别采集哟

37 zvvq

38

本文来自zvvq

39

内容来自samhan666

40 内容来自zvvq,别采集哟

41 copyright zvvq

42 内容来自samhan

43

zvvq

44

copyright zvvq

45

zvvq.cn

46 内容来自samhan666

47

内容来自zvvq

48 内容来自samhan666

49

zvvq

50

zvvq好,好zvvq

51 copyright zvvq

52 本文来自zvvq

53 copyright zvvq

54 内容来自samhan666

55

本文来自zvvq

56 内容来自samhan666

57 内容来自zvvq,别采集哟

58 内容来自samhan666

59 zvvq.cn

60 本文来自zvvq

61 内容来自samhan666

62

内容来自samhan666

63 zvvq.cn

64 zvvq好,好zvvq

65

copyright zvvq

66 zvvq.cn

67

内容来自zvvq

68 zvvq

69 内容来自samhan

70

zvvq.cn

71

本文来自zvvq

72

zvvq.cn

73 本文来自zvvq

74 zvvq

75 内容来自zvvq

76 内容来自zvvq

77 copyright zvvq

for(int i=1; i<nums.length i if int flag="(nums[i]-nums[i-1])/Math.abs(nums[i]-nums[i-1]);" preflag="="><p>`</p> copyright zvvq

<h2> zvvq.cn

53. 最大子数组

内容来自zvvq,别采集哟

</h2> 内容来自samhan

<p>给定一个整数数组 nums,找到 <br> 内容来自samhan666

子数组<br>

内容来自samhan666

最大的和,并返回它的和。</p>

内容来自samhan

<p>示例1:</p> zvvq.cn

<p>输入:nums = [-2,1,-3,4,-1,2,1,-5,4]<br>

copyright zvvq

输出:6<br> 内容来自zvvq,别采集哟

解释:子数组 [4,-1,2,1] 的和最大为 6.<br> 本文来自zvvq

示例2:</p> 内容来自zvvq

<p>输入:nums = [1]<br> zvvq.cn

输出:1<br>

内容来自zvvq,别采集哟

解释:子数组 [1] 的和最大为 1.<br>

内容来自samhan

示例3:</p> 内容来自samhan666

<p>输入:nums = [5,4,-1,7,8]<br> zvvq.cn

输出:23<br> 内容来自samhan

解释:子数组 [5,4,-1,7,8] 的和最大为 23.</p> 本文来自zvvq

<p>限制:</p> 内容来自zvvq

<p>1

zvvq

-104 内容来自zvvq,别采集哟

</p>

zvvq

<p>跟进:如果你已经找到了 O(n) 的解决方案,请尝试使用分而治之的方法编写另一个解决方案,这种方法更微妙。</p> 内容来自zvvq

<p>`<br>

内容来自zvvq,别采集哟

公共 int maxSubArray(int[] nums) {<br> 内容来自zvvq

if(nums.length == 0){<br>

内容来自zvvq,别采集哟

返回0;<br> 内容来自zvvq,别采集哟

}<br>

zvvq好,好zvvq

int max = Integer.MIN_VALUE;<br> 内容来自samhan666

int sum = Integer.MIN_VALUE;<br> 内容来自samhan

for(int i=0;我

内容来自zvvq,别采集哟

if(nums[i] &gt; 0){<br>

内容来自zvvq,别采集哟

如果(总和

zvvq.cn

总和 = nums[i];<br>

内容来自zvvq

}其他{<br> 本文来自zvvq

sum += nums[i];</p>

本文来自zvvq

<pre class="brush:php;toolbar:false">} 内容来自samhan

最大值 = Math.max(最大值, 总和);

zvvq好,好zvvq

}别的{

内容来自zvvq,别采集哟

如果(总和

内容来自zvvq,别采集哟

<p>`</p>

本文来自zvvq

<p>改进代码<br>

内容来自zvvq

`<br>

zvvq

公共 int maxSubArray(int[] nums) {<br>

内容来自zvvq,别采集哟

if(nums.length == 0){<br> zvvq

返回0;<br> 内容来自zvvq,别采集哟

}<br>

zvvq好,好zvvq

int max = Integer.MIN_VALUE;<br>

zvvq.cn

int sum = Integer.MIN_VALUE;<br> 本文来自zvvq

for(int i=0; i<nums.length i> 内容来自zvvq

如果(总和

zvvq好,好zvvq

总和 = nums[i];<br> 内容来自zvvq

}其他{<br>

copyright zvvq

sum += nums[i];</nums.length></p> 内容来自samhan666

<pre class="brush:php;toolbar:false">}

本文来自zvvq

最大值 = Math.max(最大值, 总和); 内容来自zvvq,别采集哟

} zvvq

返回最大值;

本文来自zvvq

}

内容来自zvvq

` zvvq

贪心的另一种方式 zvvq.cn

`

内容来自samhan666

公共 int maxSubArray(int[] nums) { zvvq

if(nums.length == 0){ 内容来自samhan666

返回0;

zvvq.cn

} 本文来自zvvq

int max = Integer.MIN_VALUE;

zvvq

// int sum = Integer.MIN_VALUE;

1

内容来自zvvq,别采集哟

2 内容来自samhan666

3

内容来自samhan

4

zvvq

5

copyright zvvq

6

zvvq.cn

7 本文来自zvvq

8 zvvq

int 总和 = 0; zvvq好,好zvvq

for(int i=0; i<nums.length i nums math.max><p>`</p> 内容来自samhan

</nums.length> 内容来自samhan

以上就是LeetCode Day 贪心算法 第 1 部分的详细内容,更多请关注其它相关文章!

本文来自zvvq