您的位置:首页 > 科技 > IT业 > seo关键词排名公司_韩国网页设计欣赏_自媒体发布平台有哪些_上海高端网站建设

seo关键词排名公司_韩国网页设计欣赏_自媒体发布平台有哪些_上海高端网站建设

2025/4/2 17:08:23 来源:https://blog.csdn.net/ganjiee0007/article/details/146192783  浏览:    关键词:seo关键词排名公司_韩国网页设计欣赏_自媒体发布平台有哪些_上海高端网站建设
seo关键词排名公司_韩国网页设计欣赏_自媒体发布平台有哪些_上海高端网站建设

2012. 数组美丽值求和 - 力扣(LeetCode)

题目

给你一个下标从 0 开始的整数数组 nums 。对于每个下标 i1 <= i <= nums.length - 2),nums[i] 的 美丽值 等于:

  • 2,对于所有 0 <= j < i 且 i < k <= nums.length - 1 ,满足 nums[j] < nums[i] < nums[k]
  • 1,如果满足 nums[i - 1] < nums[i] < nums[i + 1] ,且不满足前面的条件
  • 0,如果上述条件全部不满足

返回符合 1 <= i <= nums.length - 2 的所有 nums[i] 的 美丽值的总和 。

示例 1:

**输入:**nums = [1,2,3]
**输出:**2
**解释:**对于每个符合范围 1 <= i <= 1 的下标 i :

  • nums[1] 的美丽值等于 2
思路

等于2 就是比左边的都大,比右边的都小
需要两个辅助数组,分别记录
从左到右的最大。
从右边到左的最小。

解法一

java

public static int sumOfBeauties(int[] nums) {  if (nums.length < 2) {  return 0;  }  int length = nums.length;  int[] prefixMax = new int[length];  int[] subfixMin = new int[length];  prefixMax[0] = nums[0];  for (int i = nums.length - 1; i >= 0; i--) {  if (i == nums.length - 1) {  subfixMin[i] = nums[i];  } else {  subfixMin[i] = Math.min(subfixMin[i + 1], nums[i]);  }  }  int count = 0;  for (int i = 1; i < nums.length - 1; i++) {  prefixMax[i] = Math.max(prefixMax[i - 1], nums[i]);  if (nums[i] > prefixMax[i - 1] && nums[i] < subfixMin[i + 1]) {  count += 2;  } else if (nums[i] > nums[i - 1] && nums[i] < nums[i + 1]) {  count += 1;  }  }  return count;  
}

python

class Solution:  def sumOfBeauties(self, nums: List[int]) -> int:  n = len(nums)  suffix_min = [0] * n  prefix_max = [0] * n  suffix_min[n - 1] = nums[n - 1]  for i in range(n - 2, 1, -1):  suffix_min[i] = min(suffix_min[i + 1], nums[i])  count = 0  prefix_max[0] = nums[0]  for i in range(1, n - 1, 1):  if prefix_max[i - 1] < nums[i] < suffix_min[i + 1]:  count += 2  elif nums[i - 1] < nums[i] < nums[i + 1]:  count += 1  prefix_max[i] = max(prefix_max[i - 1], nums[i])  return count  a = Solution().sumOfBeauties([1, 2, 3])  
print(a)
解法二 优化数组的空间

python

class Solution2:  def sumOfBeauties(self, nums: List[int]) -> int:  n = len(nums)  suffix_min = [0] * n  suffix_min[n - 1] = nums[n - 1]  for i in range(n - 2, 1, -1):  suffix_min[i] = min(suffix_min[i + 1], nums[i])  count = 0  prefix_max = nums[0]  for i in range(1, n - 1, 1):  if prefix_max < nums[i] < suffix_min[i + 1]:  count += 2  elif nums[i - 1] < nums[i] < nums[i + 1]:  count += 1  prefix_max = max(prefix_max, nums[i])  return count  a = Solution2().sumOfBeauties([1, 2, 3])  
print(a)
总结

考点suffix/prefix arrays

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com