【C语言刷力扣】910.最小差值 ||

题目:

解题思路;

由于需要对数组中的每一个进行 +k-k 的操作,这时要求最小差值,即对较大的数 -k 对较小的数 + k

需要先对数组进行排序,再枚举对元素的操作。

  • nums [0]nums[i - 1] 的数进行 +k
  • nums [i]nums[numsSize - 1] 的数进行 - k

此时最大数是 nums[i - 1] 或者 nums[numsSize - 1]

最小数是 nums[0] 或者 nums [i]

时间复杂度:

空间复杂度:

复制代码
#define MAX(a,b) (a > b) ? a : b;
#define MIN(a,b) (a < b) ? a : b;

int cmp(const void* a, const void* b) {
    return *(int*)a - *(int*)b;
} 

int smallestRangeII(int* nums, int numsSize, int k) {
    qsort(nums, numsSize, sizeof(int), cmp);
    int max, min;
    int ans = nums[numsSize - 1] - nums[0];
    for (int i = 1; i < numsSize; i++) {
        max = MAX(nums[i-1] + k, nums[numsSize-1] - k);
        min = MIN(nums[0] + k, nums[i] - k);
        ans = MIN(ans, max - min);
    }
    return ans;
}
相关推荐
lkbhua莱克瓦245 分钟前
Java基础——常用算法4
java·数据结构·笔记·算法·github·排序算法·快速排序
m0_7482480217 分钟前
揭开 C++ vector 底层面纱:从三指针模型到手写完整实现
开发语言·c++·算法
序属秋秋秋20 分钟前
《Linux系统编程之开发工具》【实战:倒计时 + 进度条】
linux·运维·服务器·c语言·c++·ubuntu·系统编程
七夜zippoe27 分钟前
Ascend C流与任务管理实战:构建高效的异步计算管道
服务器·网络·算法
Greedy Alg44 分钟前
LeetCode 208. 实现 Trie (前缀树)
算法
还是码字踏实44 分钟前
基础数据结构之哈希表:两数之和(LeetCode 1 简单题)
数据结构·leetcode·散列表
Kt&Rs1 小时前
11.5 LeetCode 题目汇总与解题思路
数据结构·算法·leetcode
还是码字踏实1 小时前
基础数据结构之数组的前缀和技巧:和为K的子数组(LeetCode 560 中等题)
算法·leetcode·前缀和·哈希字典
沙威玛_LHE5 小时前
树和二叉树
数据结构·算法
py有趣6 小时前
LeetCode算法学习之两数之和 II - 输入有序数组
学习·算法·leetcode