亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

最大間距-算法學習

2023-07-12 04:00:45
5
0

題目詳情:
給定一個無序的數組 nums,返回 數組在排序之后,相鄰元素之間最大的差值 。如果數組元素個數小于 2,則返回 0 。
您(nin)必須編(bian)寫一個在「線性時間(jian)」內運(yun)行(xing)并使(shi)用(yong)「線性額(e)外(wai)空(kong)間(jian)」的算法。


示例:
輸入: nums = [3,6,9,1]
輸出: 3

解題思路:
這個題目是考到了桶排序的知識。
首先,判斷數組長度是否小于 2 ,若是,則直接返回 0。
然后,使用 Math.min 和 Math.max 分別找出數組中的最小值 minVal 和最大值 maxVal。
根據桶排序思想,計算桶的大小和數量。桶的大小通過 (maxVal - minVal) / (n - 1) 計算得到,桶的數量通過 (maxVal - minVal) / bucketSize + 1 計算得到。
初始化桶的最小值數組 minBucket 和最大值數組 maxBucket ,將每個桶的初始值都設置為較大或較小的安全整數。
接下來,遍歷數組 nums ,根據元素的值找到對應的桶,并更新該桶的最小值和最大值。
最后,遍歷桶,計算相鄰桶之間的最大差值。定義一個變量 maxGap 保存最大差值,定義變量 prevMax 保存上一個桶的最大值。遍歷過程中,若當前桶不為空(最大值不等于初始值),則計算當前桶的最小值與上一個桶的最大值之間的差值,并更新 maxGap 和 prevMax。
最(zui)終(zhong)將 maxGap 作(zuo)為結果返回(hui)。

代碼實現:
function maximumGap(nums) {
    const n = nums.length;
    if (n < 2) {
        return 0;
    }

    // 找到數組中的最小值和最大值
    const minVal = Math.min(...nums);
    const maxVal = Math.max(...nums);

    // 計算桶的大小和數量
    const bucketSize = Math.max(1, Math.floor((maxVal - minVal) / (n - 1)));
    const bucketCount = Math.floor((maxVal - minVal) / bucketSize) + 1;

    // 初始化桶的最小值和最大值
    const minBucket = Array(bucketCount).fill(Number.MAX_SAFE_INTEGER);
    const maxBucket = Array(bucketCount).fill(Number.MIN_SAFE_INTEGER);

    // 遍歷數組,確定每個桶的最小值和最大值
    for (let i = 0; i < n; i++) {
        const num = nums[i];
        const index = Math.floor((num - minVal) / bucketSize);
        minBucket[index] = Math.min(minBucket[index], num);
        maxBucket[index] = Math.max(maxBucket[index], num);
    }

    // 計算相鄰桶之間的最大差值
    let maxGap = 0;
    let prevMax = maxBucket[0];
    for (let i = 1; i < bucketCount; i++) {
        if (minBucket[i] !== Number.MAX_SAFE_INTEGER) {
            maxGap = Math.max(maxGap, minBucket[i] - prevMax);
            prevMax = maxBucket[i];
        }
    }

    return maxGap;
}

// 示例輸入
const nums = [3, 6, 9, 1];

// 調用函數并輸出結果
console.log(maximumGap(nums));

0條評論
作者已關閉評論
t****m
98文章數(shu)
1粉絲數
t****m
98 文章 | 1 粉絲
t****m
98文章(zhang)數
1粉絲數(shu)
t****m
98 文章 | 1 粉絲
原創

最大間距-算法學習

2023-07-12 04:00:45
5
0

題目詳情:
給定一個無序的數組 nums,返回 數組在排序之后,相鄰元素之間最大的差值 。如果數組元素個數小于 2,則返回 0 。
您必須(xu)編(bian)寫(xie)一個在(zai)「線(xian)性(xing)時間」內運行(xing)并使用「線(xian)性(xing)額外空間」的算法。


示例:
輸入: nums = [3,6,9,1]
輸出: 3

解題思路:
這個題目是考到了桶排序的知識。
首先,判斷數組長度是否小于 2 ,若是,則直接返回 0。
然后,使用 Math.min 和 Math.max 分別找出數組中的最小值 minVal 和最大值 maxVal。
根據桶排序思想,計算桶的大小和數量。桶的大小通過 (maxVal - minVal) / (n - 1) 計算得到,桶的數量通過 (maxVal - minVal) / bucketSize + 1 計算得到。
初始化桶的最小值數組 minBucket 和最大值數組 maxBucket ,將每個桶的初始值都設置為較大或較小的安全整數。
接下來,遍歷數組 nums ,根據元素的值找到對應的桶,并更新該桶的最小值和最大值。
最后,遍歷桶,計算相鄰桶之間的最大差值。定義一個變量 maxGap 保存最大差值,定義變量 prevMax 保存上一個桶的最大值。遍歷過程中,若當前桶不為空(最大值不等于初始值),則計算當前桶的最小值與上一個桶的最大值之間的差值,并更新 maxGap 和 prevMax。
最(zui)終將 maxGap 作為(wei)結果返回。

代碼實現:
function maximumGap(nums) {
    const n = nums.length;
    if (n < 2) {
        return 0;
    }

    // 找到數組中的最小值和最大值
    const minVal = Math.min(...nums);
    const maxVal = Math.max(...nums);

    // 計算桶的大小和數量
    const bucketSize = Math.max(1, Math.floor((maxVal - minVal) / (n - 1)));
    const bucketCount = Math.floor((maxVal - minVal) / bucketSize) + 1;

    // 初始化桶的最小值和最大值
    const minBucket = Array(bucketCount).fill(Number.MAX_SAFE_INTEGER);
    const maxBucket = Array(bucketCount).fill(Number.MIN_SAFE_INTEGER);

    // 遍歷數組,確定每個桶的最小值和最大值
    for (let i = 0; i < n; i++) {
        const num = nums[i];
        const index = Math.floor((num - minVal) / bucketSize);
        minBucket[index] = Math.min(minBucket[index], num);
        maxBucket[index] = Math.max(maxBucket[index], num);
    }

    // 計算相鄰桶之間的最大差值
    let maxGap = 0;
    let prevMax = maxBucket[0];
    for (let i = 1; i < bucketCount; i++) {
        if (minBucket[i] !== Number.MAX_SAFE_INTEGER) {
            maxGap = Math.max(maxGap, minBucket[i] - prevMax);
            prevMax = maxBucket[i];
        }
    }

    return maxGap;
}

// 示例輸入
const nums = [3, 6, 9, 1];

// 調用函數并輸出結果
console.log(maximumGap(nums));

文章來自個人專欄
文章(zhang) | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0