对于一个包含自然数的列表nums, 计算他的度。列表的度定义为列表里任 一元素出现的频率的最大值。
时间: 2023-05-15 13:05:37 浏览: 357
可以使用哈希表来统计每个元素出现的次数,然后找出出现次数最多的元素,该元素出现的次数即为列表的度。以下是示例代码:
int findDegree(vector<int>& nums) {
unordered_map<int, int> count;
int degree = 0;
for (int num : nums) {
count[num]++;
degree = max(degree, count[num]);
}
return degree;
}
相关问题
用python写一个对于一个包含自然数的列表nums, 计算他的度。列表的度定义为列表里任 一元素出现的频率的最大值。
可以使用Python的collections模块中的Counter函数来实现:
```python
from collections import Counter
def find_degree(nums):
count = Counter(nums)
max_freq = max(count.values())
return max_freq
```
这个函数接受一个包含自然数的列表nums作为参数,使用Counter函数统计每个元素出现的次数,然后找到出现次数的最大值,即为列表的度。
对于一个包含自然数的列表nums,计算他的度。列表的度定义为列表里任一元素出现的频率的最大值
。算法1:
1. 使用一个字典记录每个元素出现的次数及其首次出现的位置。
2. 遍历字典,找到出现次数最大的元素及其出现次数。
3. 返回这个出现次数即为列表nums的度。
时间复杂度:O(n),其中n为列表nums的长度。
空间复杂度:O(n),其中n为列表nums的长度。
Python 代码:
```python
class Solution:
def findShortestSubArray(self, nums: List[int]) -> int:
freq = {}
left, right = {}, {}
for i, num in enumerate(nums):
if num not in freq:
freq[num] = 0
left[num] = i
freq[num] += 1
right[num] = i
max_freq = max(freq.values())
degree = float("inf")
for num, count in freq.items():
if count == max_freq:
degree = min(degree, right[num] - left[num] + 1)
return degree
```
算法2:
1. 使用一个字典记录每个元素出现的次数。
2. 遍历字典,找到出现次数最大的元素及其出现次数。
3. 使用列表index记录这个元素在列表nums中出现的所有位置。
4. 计算这些位置的最大值和最小值的差即为列表nums的度。
时间复杂度:O(n^2),其中n为列表nums的长度。
空间复杂度:O(n),其中n为列表nums的长度。
Python 代码:
```python
class Solution:
def findShortestSubArray(self, nums: List[int]) -> int:
freq = {}
for num in nums:
freq[num] = freq.get(num, 0) + 1
max_freq = max(freq.values())
degree = float("inf")
for num, count in freq.items():
if count == max_freq:
index = [i for i, x in enumerate(nums) if x == num]
degree = min(degree, max(index) - min(index) + 1)
return degree
```
阅读全文