[算法] 求无序数组元素最小差值
2013-09-05 10:17
246 查看
通过排序后,依次遍历前后两值求差即可,所以实质上的核心问题是排序;
通过经典的比较排序算法复杂度在O(nlogn),而如果数据波动不大,则可通过桶排序将复杂度降到O(n);
通过经典的比较排序算法复杂度在O(nlogn),而如果数据波动不大,则可通过桶排序将复杂度降到O(n);
array = (5, 2, 4, 9, 0, 6) # quick sort # O(nlogn) def split(list, start, end): middle = list[end] index = start -1 for i in range(start, end+1): if list[i] <= middle: index += 1 temp = list[i] list[i] = list[index] list[index] = temp return index def quick_sort(list, start, end): if (start < end): index = split(list, start, end) quick_sort(list, start, index-1) quick_sort(list, index+1, end) # bucket sort def bucket_sort(list): max_e = list[0] min_e = list[0] # max & min element for i in list: if i > max_e: max_e = i if i < min_e: min_e = i bucket_v = max_e - min_e + 1 B = [] for i in range(bucket_v): B.append(0) for i in list: B[i - min_e] += 1 return B def min_diff(): l = list(array) # sort B = bucket_sort(l) first = True diff = -1 for i in range(len(B)): if B[i] >= 2: diff = 0 break elif B[i] == 1 and first: low = i first = False elif B[i] == 1: # ! first high = i tmp_diff = high - low if (diff < 0 or tmp_diff < diff): diff = tmp_diff low = i # else B[i] == 0, ignore print "min diff from bucket sort:", diff # qsort quick_sort(l, 0, len(l)-1) first = True diff = -1 for i in l: if first: low = i first = False else: high = i tmp_diff = high - low if (diff < 0 or tmp_diff < diff): diff = tmp_diff low = i print "min diff from quick sort:", diff if __name__ == "__main__": print array min_diff()
相关文章推荐
- 算法--微软面试题:求一个整数数组元素间最小差值
- 微软等数据结构+算法面试100题(40)-- 旋转数组中的最小元素
- 【华为】题目:有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求: 通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小。
- 交换两数组元素使两数组和差值最小
- 有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 从无序数组中获取最小的M个元素(小顶堆实现)
- C语言输出旋转后数组中的最小数元素的算法原理与实例
- 有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 华为面试题 题目:有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 无序数组同时查找最大和最小的元素
- 一个无序实数数组中的相邻两个元素的最大差值
- 《数组-规划》 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小
- 给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树
- 每天学习一算法系列(29)(有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小)
- 无序数组求相邻元素最大差值(tiger基金的笔试题)
- 交换两个数组的元素使之总和的差值最小
- [算法收集]数组a元素的和与 数组b元素的和之间的差最小
- 《算法》第一章——数组的局部最小元素
- 输入一个整数数组,返回所有元素两两之差绝对值最小的值,O(n)算法
- php 求一个无序数组经过排列后任意两个相邻元素之差的最大值(算法)