首页 > 试题广场 >

最小差值

[编程题]最小差值
  • 热度指数:4820 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给你一个数组,请你求出数组a中任意两个元素间差的绝对值的最小值。
示例1

输入

[1,2,4]

输出

1
示例2

输入

[1,3,1]

输出

0
用int的不行,用long行,你这道题备注备了个寂寞吗。

发表于 2021-01-27 23:24:13 回复(1)
package main
const INT_MAX = int(^uint(0) >> 1)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 求最小差值
 * @param a int整型一维数组 数组a
 * @return int整型
 */
func minDifference(a []int) int {
	// write code here
    qsort(0, len(a) - 1, a)
    minN := INT_MAX
    for i:= 0; i< len(a) - 1; i++ {
        if (a[i] < 0 && a[i+1] < 0) || (a[i] >= 0 && a[i+1] >= 0) {
            minN = min(minN, a[i+1] - a[i])
        } else if a[i+1] - minN < a[i] {
            minN = a[i+1] - a[i]
        }
    }
    return minN
}

func qsort(b, e int, vec []int) {
	if b > e {
		return
	}
	l, r := b, e
	tmp := vec[b]
	for l < r {
		for l < r && vec[r] > tmp {
			r--
		}
		if l < r {
			vec[l] = vec[r]
			l++
		}
		for l < r && vec[l] < tmp {
			l++
		}
		if l < r {
			vec[r] = vec[l]
			r--
		}
	}
	vec[r] = tmp
	qsort(b, l-1, vec)
	qsort(l+1, e, vec)
}
func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}
golang 需要考虑正数与负数做差超过int的边界
#golang
编辑于 2023-12-23 19:07:32 回复(0)
垃圾,这都是什么垃圾题啊,哪里找的
public int minDifference(int[] a) {
        // write code here
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = i + 1; j < a.length; j++) {
                long temp = (long) a[j] - (long) a[i];
                if (Math.abs(temp) < min) {
                    min = (int) Math.abs(temp);
                }
            }
        }
        return min;
    }


发表于 2021-09-25 18:38:09 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 求最小差值
 * @param a int整型一维数组 数组a
 * @param aLen int a数组长度
 * @return int整型
 */
int minDifference(int* a, int aLen ) {
    int ans=abs(a[1]-a[0]),i,j;
        for(i=0;i<aLen;i++)
        {
            for(j=i+1;j<aLen;j++)
            {
                if(abs(a[i]-a[j])<ans)
                {
                    ans=abs(a[i]-a[j]);
                }
            }
        }
    return ans;
    // write code here
}
发表于 2021-09-02 20:53:06 回复(0)
int minDifference(int* a, int aLen ) {
    int mns = abs(a[1]-a[0]);
    for(int i = 0; i < aLen-1; i++)
    {
        for(int j = i+1; j < aLen; j++)
        {
            abs(a[i]-a[j])<mns && (mns = abs(a[i]-a[j]));
        }
    }
    if(mns < 0)
    {
        return mns-1;
    }
    else{
        return mns;
    }   
}

发表于 2021-07-17 17:29:45 回复(0)
啊这,超出int范围大家都有说,但是我看有的人是判断了相邻差是不是最小差值,这是不对的,题目说了是任意差值
发表于 2021-07-13 22:50:08 回复(1)
class Solution:
    def minDifference(self , a ):
        # write code here
        set_tmp = set(a)
        if len(a) != len(set_tmp):
            return 0
        else:
            a.sort()
            min_val = a[1] - a[0]
            for i in range(1, len(a)-1):
                if a[i+1] - a[i] < min_val:
                    min_val = a[i+1] - a[i]
                else:
                    continue
        return min_val


发表于 2021-07-13 20:47:07 回复(0)
class Solution:
    def minDifference(self , a ):
        # write code here
        a.sort()
        m=a[1]-a[0]
        for i in range(len(a)-1):
            m=a[i+1]-a[i] if a[i+1]-a[i] <m else m
            if m==0:
                break
        return m

发表于 2021-06-17 21:25:25 回复(0)
[java] 题目有bug,输入[-2147483648,0],输出应该是2147483648,但是超int.max了,所以方法返回值应该是long
发表于 2021-06-13 13:40:39 回复(0)
首先把数组排序,保证最小差值只可能出现在相邻元素之间,这样遍历一遍,两两相减就可以了。
相减时可能出现溢出,所有暂时都用long保存,如果溢出int表示范围,就返回INT的最大值,否则正常返回。
发表于 2021-03-18 16:50:31 回复(0)
要考虑到范围 longlong'
发表于 2021-02-24 19:33:32 回复(0)
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 求最小差值
# @param a int整型一维数组 数组a
# @return int整型
#
class Solution:
    def minDifference(self , a ):
        a.sort()
        t = abs(a[0] - a[1])
        for i in range(0, len(a) - 1):
            if t > abs(a[i] - a[i + 1]):
                t = abs(a[i] - a[i + 1])
        return t

发表于 2021-01-27 17:33:31 回复(0)

三步走:

  1. 排序
  2. 获取int最大值
  3. 穷举
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 求最小差值
# @param a int整型一维数组 数组a
# @return int整型
#
class Solution:
    def minDifference(self , a ):
        # write code here
        a = sorted(a)    # 排序

        import sys
        res = sys.maxsize    # 获取一个 int 最大值

        for i, e in enumerate(a):    # 穷举比较
            n = abs(a[i] - a[i - 1])
            if n < res:
                res = n
        return res
发表于 2020-12-17 19:44:42 回复(0)