求数组元素超过一半的元素值

来源:互联网 发布:兜率宫的正确读音 知乎 编辑:程序博客网 时间:2024/05/18 03:59

此题为百度、腾讯、阿里这类企业常考算法题,也可以说考察你对数据结构特点的了解程度

1. 如果数组为无序的

for (int j=0; j<n; j++){if (i == 0)val = a[j];if (val == a[j])i++;else if (val != a[j])i--;}

 i作为个数,val只有在i为0的时候替换, 因为求的是超过一半个数的数组元素,所以最后val的值肯定为所求值,时间复杂度O(n)

2.如果数组为有序的呢

这就不是算法题了,更像是脑筋急转弯

数组有序,则相同元素肯定挨着,如果有元素超过了一半个数,肯定要经过数组的中间

所以a[n/2]即为所求值,时间复杂度O(1)



阅读全文
0 0
原创粉丝点击