一个整数数组,返回所有元素两两之差绝对值最小的值 O(n)复杂度
一个很古老题目,今天翻出来想了想。
两两之差的绝对值的最小值,也就是在找所有元素中离得最近的两个元素的距离。
我有一个O(n)的算法,用空间换来的。方法如下:申请一个长度为UINT_MAX的bool型数组isExist[],初始值均为false。第一阶段,遍历输入数组,并记录数组的最大值最小值对于ai,将isExist[ai]标记为true。标记过程中如果发现某元素已经出现,说明有重复原色,直接返回0,即是最小值。第二阶段,遍历数组isExist[]中位于输入数组最小值和最大值之间的部分,则很容易找到最近距离。第一阶段时间复杂度为O(N), 第二阶段最坏情况下时间复杂度为O(UINT_MAX),是个常数。所以,总的时间复杂度是O(N).
理论上讲是O(N)的,实际应用上因为第二阶段最坏要遍历UINT_MAX个元素,除非N非常大,否则还不如O(N*logN)的算法速度快。
总觉得说这个方法是O(N)的还是很牵强。高手们给看看呗。
两两之差的绝对值的最小值,也就是在找所有元素中离得最近的两个元素的距离。
我有一个O(n)的算法,用空间换来的。方法如下:申请一个长度为UINT_MAX的bool型数组isExist[],初始值均为false。第一阶段,遍历输入数组,并记录数组的最大值最小值对于ai,将isExist[ai]标记为true。标记过程中如果发现某元素已经出现,说明有重复原色,直接返回0,即是最小值。第二阶段,遍历数组isExist[]中位于输入数组最小值和最大值之间的部分,则很容易找到最近距离。第一阶段时间复杂度为O(N), 第二阶段最坏情况下时间复杂度为O(UINT_MAX),是个常数。所以,总的时间复杂度是O(N).
理论上讲是O(N)的,实际应用上因为第二阶段最坏要遍历UINT_MAX个元素,除非N非常大,否则还不如O(N*logN)的算法速度快。
总觉得说这个方法是O(N)的还是很牵强。高手们给看看呗。
...全文
相关推荐
经典面试题一
**求整数数组两两之差绝对值最小值** - Microsoft提出的这道问题考察的是数组处理和算法优化。
华为面试180题(软件)
整数数组两两之差绝对值最小值** - **问题**: 给定一个整数数组,求两两之差绝对值最小的值。 - **解法**: 可以通过对数组进行排序,然后遍历相邻元素计算它们的差值来找到最小的绝对值差异。
微软、谷歌、百度等公司经典面试100题[第101-170题].pdf
整数数组两两之差绝对值最小值**- **题目描述**:给定一个整数数组,请求出两两之差绝对值最小的值。
1.给出一个整数数组,求其中任意两个元素之差的最大值。
根据给定文件的信息,我们可以将相关的知识点分为两个部分来详细阐述:### 第一部分:求整数数组中任意两个元素之差的最大值#### 题目背景与需求题目要求给定一个整数数组,计算并返回数组中任意两个元素之差的最大值
二分搜索 设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j
这个修改后的二分搜索算法在O(log n)的时间复杂度内完成任务,因为它每次都将搜索范围减半。对于大规模有序数据,这是非常高效的,比线性搜索的O(n)时间复杂度要快得多。


