擅长:python、mysql、java
<p>虽然有很多更好的方法来解决这个问题,例如@zwer对您的问题的评论中指出的,但我将如何解决您的问题:</p>
<pre><code># O(n ** 2)
def find_int(array):
n = len(array)
count = [1 for i in range(n)]
for i in range(n):
for j in range(n):
if i == j: continue
if array[i] == array[j]:
count[i] += 1
return max(count), count.index(max(count))
# Worse than O(n ** 2)
def find_int_using_slice(array):
n = len(array)
count = [1 for i in range(n)]
for i in range(n):
for a_j in array[0:i] + array[i+1:]:
if array[i] == a_j:
count[i] += 1
return max(count), count.index(max(count))
print(find_int_using_slice([1,2,3,1,2,3,2]))
</code></pre>
<p>我们在这里使用嵌套的for循环,并使用<code>continue</code>在两个索引相同时跳过迭代。在</p>
<p>除非专门用于学习目的,否则请考虑将内置功能用于常见任务,因为它们已得到很好的实施、测试、优化等</p>
<p>有许多潜在的解决方案,但根据应用程序的要求,我推荐两种方法:1)从左到右一次排序和计数:O(n*log(n))并失去原来的顺序;或者2)使用字典来维护计数,只需要从左到右进行一次循环:O(n),但使用更多的内存。当然,更好的选择是使用高度优化的内置方法,但这是你的选择</p>