Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie.
Each child i
has a greed factor g[i]
, which is the minimum size of a cookie that the child will be content with; and each cookie j
has a size s[j]
. If s[j] >= g[i]
, we can assign the cookie j
to the child i
, and the child i
will be content. Your goal is to maximize the number of your content children and output the maximum number.
Example 1:
Input: g = [1,2,3], s = [1,1] Output: 1 Explanation: You have 3 children and 2 cookies. The greed factors of 3 children are 1, 2, 3. And even though you have 2 cookies, since their size is both 1, you could only make the child whose greed factor is 1 content. You need to output 1.
Example 2:
Input: g = [1,2], s = [1,2,3] Output: 2 Explanation: You have 2 children and 3 cookies. The greed factors of 2 children are 1, 2. You have 3 cookies and their sizes are big enough to gratify all of the children, You need to output 2.
Constraints:
1 <= g.length <= 3 * 104
0 <= s.length <= 3 * 104
1 <= g[i], s[j] <= 231 - 1
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
# 按降序分配最大的饼干给胃口最大的孩子
g.sort()
s.sort()
s_index = len(s) - 1
count = 0
# 注意这里的循环顺序不能颠倒
# 例如 g[1,2,7,10] s[1,3,5,9]
for i in range(len(g)-1, -1, -1):
if s_index>=0 and s[s_index] >= g[i]:
s_index -= 1
count += 1
return count
Complexity Analysis:
-
Time Complexity
:
O(nlogn + mlogm) , where nlogn for sorting s and mlogm for sorting g. -
Space Complexity
:
O(1)
A wiggle sequence is a sequence where the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exists) may be either positive or negative. A sequence with one element and a sequence with two non-equal elements are trivially wiggle sequences.
- For example,
[1, 7, 4, 9, 2, 5]
is a wiggle sequence because the differences(6, -3, 5, -7, 3)
alternate between positive and negative. - In contrast,
[1, 4, 7, 2, 5]
and[1, 7, 4, 5, 5]
are not wiggle sequences. The first is not because its first two differences are positive, and the second is not because its last difference is zero.
A subsequence is obtained by deleting some elements (possibly zero) from the original sequence, leaving the remaining elements in their original order.
Given an integer array nums
, return the length of the longest wiggle subsequence of nums
.
Example 1:
Input: nums = [1,7,4,9,2,5] Output: 6 Explanation: The entire sequence is a wiggle sequence with differences (6, -3, 5, -7, 3).
Example 2:
Input: nums = [1,17,5,10,13,15,10,5,16,8] Output: 7 Explanation: There are several subsequences that achieve this length. One is [1, 17, 10, 13, 10, 16, 8] with differences (16, -7, 3, -3, 6, -8).
Example 3:
Input: nums = [1,2,3,4,5,6,7,8,9] Output: 2
Constraints:
1 <= nums.length <= 1000
0 <= nums[i] <= 1000
Follow up: Could you solve this in O(n)
time?
class Solution:
def wiggleMaxLength(self, nums: List[int]) -> int:
pre_diff = 0
cur_diff = 0
result = 1
# 处理三种情况 1.上下有平坡
# 2. 首位元素
# 单调坡度平坡
for i in range(len(nums)-1):
cur_diff = nums[i+1] - nums[i]
if (pre_diff >= 0 and cur_diff < 0) or (pre_diff <= 0 and cur_diff > 0):
result += 1
pre_diff = cur_diff
#pre_diff = cur_diff 放在这里没有考虑单调平坡情况
return result
Complexity Analysis:
-
Time Complexity
:
O(n) -
Space Complexity
:
O(1)
Given an integer array nums
, find the subarray with the largest sum, and return its sum.
Example 1:
Input: nums = [-2,1,-3,4,-1,2,1,-5,4] Output: 6 Explanation: The subarray [4,-1,2,1] has the largest sum 6.
Example 2:
Input: nums = [1] Output: 1 Explanation: The subarray [1] has the largest sum 1.
Example 3:
Input: nums = [5,4,-1,7,8] Output: 23 Explanation: The subarray [5,4,-1,7,8] has the largest sum 23.
Constraints:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
Follow up: If you have figured out the O(n)
solution, try coding another solution using the divide and conquer approach, which is more subtle.
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
res, count = float('-inf'),float('-inf')
for num in nums:
#现在的数值是取求和,或是重新以现在的数值开始
count = num + max(count, 0)
res = max(res, count)
return res
Complexity Analysis:
Time Complexity
:
O(n)Space Complexity
:
O(1)