zvvq技术分享网

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

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

本文来自zvvq

455. 分配 Cookie

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

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

zvvq.cn

示例1:

zvvq.cn

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

内容来自zvvq

输出:1

内容来自zvvq

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

内容来自zvvq

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

你需要输出1. copyright zvvq

示例2:

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

输出:2

zvvq好,好zvvq

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

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

zvvq.cn

你需要输出2.

限制: copyright zvvq

1 0 1

内容来自samhan666

1

本文来自zvvq

2 内容来自zvvq,别采集哟

3 内容来自samhan

4 copyright zvvq

5

zvvq

6

内容来自zvvq,别采集哟

7 本文来自zvvq

8 zvvq好,好zvvq

9

zvvq好,好zvvq

10 内容来自samhan

11

内容来自samhan666

12

内容来自zvvq

13

内容来自zvvq,别采集哟

14

zvvq好,好zvvq

15 zvvq好,好zvvq

16

copyright zvvq

17

内容来自samhan666

18

本文来自zvvq

19 本文来自zvvq

20

zvvq.cn

21 zvvq.cn

22

内容来自zvvq

23

内容来自samhan666

24 内容来自samhan

25 zvvq

26

内容来自zvvq

27 copyright zvvq

28

内容来自samhan

29

内容来自zvvq

30

内容来自zvvq

31

内容来自zvvq,别采集哟

32 copyright zvvq

33 zvvq好,好zvvq

34

内容来自samhan

35

copyright zvvq

36 内容来自samhan

37

zvvq好,好zvvq

38

zvvq好,好zvvq

39 内容来自zvvq

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

zvvq.cn

// 避免空指针

zvvq

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

内容来自zvvq,别采集哟

返回0;

内容来自samhan

} 内容来自samhan

// 2 * nlogn

zvvq.cn

数组.sort(g);

copyright zvvq

数组.sort(s);

内容来自zvvq,别采集哟

整数 i = 0; 内容来自samhan

整数 j = 0;

内容来自samhan666

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

while(i 内容来自zvvq,别采集哟

<p>时间:n`logn</p> zvvq好,好zvvq

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

zvvq.cn

`<br>

zvvq好,好zvvq

public int findContentChildren(int[] g, int[] s) {<br> 内容来自samhan

// 避免空指针<br> zvvq.cn

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

内容来自samhan666

返回0;<br>

本文来自zvvq

}<br> zvvq.cn

// 2 * nlogn<br> zvvq

Arrays.sort(g);<br> 内容来自samhan666

Arrays.sort(s);</p>

内容来自samhan666

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

本文来自zvvq

整数计数=0;

内容来自zvvq,别采集哟

for(int i=0; i<s.length j i>= g[j]){ 本文来自zvvq

j++; zvvq

计数++;

zvvq好,好zvvq

}

内容来自zvvq,别采集哟

} copyright zvvq

返回计数;   内容来自samhan

}

内容来自samhan666

</s.length>

zvvq

` 内容来自samhan666

376. 摆动子序列

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

内容来自samhan666

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

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

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

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

示例1: copyright zvvq

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

内容来自samhan666

输出:6 zvvq.cn

解释:整个序列是一个有差异的摆动序列 (6, -3, 5, -7, 3)。 内容来自samhan

示例2:

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

内容来自samhan666

输出:7

copyright zvvq

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

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

内容来自zvvq

示例3:

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

copyright zvvq

输出:2

限制:

zvvq

1 0

内容来自samhan666

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

` zvvq

公共 int wiggleMaxLength(int[] nums) {

zvvq.cn

if(nums.length == 0){ 本文来自zvvq

返回0; 内容来自samhan

} zvvq.cn

整数计数 = 1; 内容来自samhan

int preFlag = 0; copyright zvvq

int pre = nums[0];

1

内容来自zvvq,别采集哟

2 zvvq

3 本文来自zvvq

4 zvvq好,好zvvq

5

zvvq

6

zvvq好,好zvvq

7

zvvq

8

内容来自zvvq

9 内容来自zvvq,别采集哟

10 内容来自samhan

11

zvvq

12 内容来自zvvq,别采集哟

13 内容来自samhan666

14

内容来自samhan666

15 内容来自samhan666

16 zvvq

17

zvvq.cn

18 zvvq

19

内容来自samhan

20 zvvq

21 本文来自zvvq

22 内容来自zvvq

23 本文来自zvvq

24

内容来自samhan666

25

内容来自zvvq

26 内容来自zvvq

27 zvvq好,好zvvq

28 zvvq好,好zvvq

29 内容来自zvvq,别采集哟

30

zvvq好,好zvvq

31

copyright zvvq

32

本文来自zvvq

33 本文来自zvvq

34 内容来自samhan

35

zvvq.cn

36

内容来自samhan666

37 zvvq好,好zvvq

38 本文来自zvvq

39

内容来自zvvq,别采集哟

40 内容来自zvvq

41

内容来自zvvq,别采集哟

42 zvvq好,好zvvq

43 内容来自zvvq

44

zvvq.cn

45 内容来自zvvq

46 内容来自zvvq,别采集哟

47 本文来自zvvq

48 内容来自samhan666

49

内容来自zvvq,别采集哟

50

zvvq

51

zvvq.cn

52 copyright zvvq

53

zvvq

54 zvvq

55

zvvq

56 zvvq.cn

57 zvvq好,好zvvq

58

copyright zvvq

59

本文来自zvvq

60 copyright zvvq

61 内容来自samhan

62

内容来自samhan666

63 copyright zvvq

64

zvvq好,好zvvq

65 copyright zvvq

66

copyright zvvq

67

内容来自samhan666

68

zvvq

69

内容来自zvvq,别采集哟

70

zvvq好,好zvvq

71

zvvq

72

内容来自samhan

73 zvvq

74

内容来自samhan

75 内容来自zvvq

76 copyright zvvq

77 内容来自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> zvvq好,好zvvq

<h2> 内容来自samhan

53. 最大子数组

内容来自zvvq,别采集哟

</h2> 内容来自samhan666

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

子数组<br> 内容来自samhan666

最大的和,并返回它的和。</p> 内容来自zvvq,别采集哟

<p>示例1:</p> 本文来自zvvq

<p>输入:nums = [-2,1,-3,4,-1,2,1,-5,4]<br> 内容来自samhan666

输出:6<br>

内容来自zvvq,别采集哟

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

zvvq好,好zvvq

示例2:</p>

zvvq

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

输出:1<br>

内容来自zvvq,别采集哟

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

内容来自zvvq

示例3:</p>

copyright zvvq

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

内容来自samhan666

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

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

<p>限制:</p>

zvvq好,好zvvq

<p>1 zvvq

-104 本文来自zvvq

</p>

本文来自zvvq

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

内容来自samhan666

<p>`<br>

本文来自zvvq

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

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

内容来自zvvq

返回0;<br>

内容来自zvvq

}<br>

内容来自zvvq,别采集哟

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

int sum = Integer.MIN_VALUE;<br>

copyright zvvq

for(int i=0;我

本文来自zvvq

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

内容来自samhan666

如果(总和

内容来自zvvq

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

}其他{<br> zvvq

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

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

内容来自samhan666

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

内容来自zvvq

}别的{ zvvq好,好zvvq

如果(总和 zvvq.cn

<p>`</p>

内容来自samhan

<p>改进代码<br> 内容来自samhan666

`<br>

copyright zvvq

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

zvvq

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

内容来自zvvq,别采集哟

返回0;<br> 内容来自zvvq

}<br>

zvvq

int max = Integer.MIN_VALUE;<br>

zvvq.cn

int sum = Integer.MIN_VALUE;<br>

copyright zvvq

for(int i=0; i<nums.length i>

内容来自zvvq,别采集哟

如果(总和 内容来自samhan666

总和 = nums[i];<br> 内容来自zvvq,别采集哟

}其他{<br>

zvvq

sum += nums[i];</nums.length></p> 本文来自zvvq

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

zvvq

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

}

内容来自zvvq

返回最大值;

本文来自zvvq

} 内容来自samhan666

` 内容来自samhan666

贪心的另一种方式

zvvq好,好zvvq

`

内容来自zvvq

公共 int maxSubArray(int[] nums) {

zvvq.cn

if(nums.length == 0){ zvvq.cn

返回0;

copyright zvvq

}

内容来自samhan666

int max = Integer.MIN_VALUE;

zvvq

// int sum = Integer.MIN_VALUE;

1

内容来自samhan666

2 copyright zvvq

3 内容来自zvvq,别采集哟

4

内容来自zvvq,别采集哟

5 内容来自zvvq

6

内容来自samhan666

7 内容来自samhan

8

内容来自zvvq,别采集哟

int 总和 = 0; copyright zvvq

for(int i=0; i<nums.length i nums math.max><p>`</p>

本文来自zvvq

</nums.length> zvvq

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