最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2023-04-29:一個序列的 寬度 定義為該序列中最大元素和最小元素的差值。 給你一個整

2023-04-29 21:27 作者:福大大架構(gòu)師每日一題  | 我要投稿

2023-04-29:一個序列的 寬度 定義為該序列中最大元素和最小元素的差值。給你一個整數(shù)數(shù)組 nums ,返回 nums 的所有非空 子序列 的 寬度之和 由于答案可能非常大,請返回對 109 + 7 取余 后的結(jié)果。子序列 定義為從一個數(shù)組里刪除一些(或者不刪除)元素, 但不改變剩下元素的順序得到的數(shù)組 例如,[3,6,2,7] 就是數(shù)組 [0,3,1,6,2,2,7] 的一個子序列。輸入:nums = [2,1,3]。輸出:6。

答案2023-04-29:

解題思路:

  1. 1.?排序

首先對數(shù)組進行排序,這樣我們就可以根據(jù)每個子序列的首尾元素來計算它的寬度了。

  1. 1.?計算寬度

我們使用 A 表示當前子序列的寬度,即末尾元素與首元素的差值,使用 B 表示上一個子序列的寬度,即前一次循環(huán)中的 A 值。具體計算過程如下:

A?=?(D?*?nums[i])?%?mod
B?=?((B?*?2)?%?mod?+?nums[i?-?1])?%?mod
ans?=?(ans?+?A?-?B?+?mod)?%?mod
C?=?(C?*?2)?%?mod
D?=?(D?+?C)?%?mod

其中 D 和 C 分別表示當前子序列的長度和可能的貢獻值,計算方法如下:

C?=?(C?*?2)?%?mod
D?=?(D?+?C)?%?mod

  1. 1.?取模

由于答案非常大,需要對其進行 10^9+7 取模,即將 ans 的值對 mod 取余。

時間復雜度:

排序的時間復雜度為 O(nlogn),計算寬度的時間復雜度為 O(n),因此總的時間復雜度為 O(nlogn)。

空間復雜度:

除了輸入數(shù)據(jù)外,算法使用了常數(shù)級別的額外空間,因此空間復雜度為 O(1)。

go完整代碼如下:

package?main

import?(
????"fmt"
????"sort"
)

func?sumSubseqWidths(nums?[]int)?int?{
????sort.Ints(nums)
????mod?:=?1000000007
????ans?:=?0
????var?A,?B,?C,?D?int64?=?0,?0,?1,?1
????for?i?:=?1;?i?<?len(nums);?i++?{
????????A?=?(D?*?int64(nums[i]))?%?int64(mod)
????????B?=?((B*2)%int64(mod)?+?int64(nums[i-1]))?%?int64(mod)
????????ans?=?(ans?+?int(A-B+int64(mod)))?%?int(mod)
????????C?=?(C?*?2)?%?int64(mod)
????????D?=?(D?+?C)?%?int64(mod)
????}
????return?ans
}

func?main()?{
????nums?:=?[]int{2,?1,?3}
????result?:=?sumSubseqWidths(nums)
????fmt.Println(result)
}

圖片
在這里插入圖片描述

rust完整代碼如下:

fn?sum_subseq_widths(nums:?Vec<i32>)?->?i32?{
????let?mut?nums?=?nums.clone();
????nums.sort_unstable();
????let?mod_num?=?1000000007;
????let?mut?ans?=?0;
????let?mut?a?=?0;
????let?mut?b?=?0;
????let?mut?c?=?1;
????let?mut?d?=?1;
????for?i?in?1..nums.len()?{
????????a?=?(d?*?nums[i]?as?i64)?%?mod_num;
????????b?=?((b?*?2)?%?mod_num?+?nums[i?-?1]?as?i64)?%?mod_num;
????????ans?=?(ans?+?a?-?b?+?mod_num)?%?mod_num;
????????c?=?(c?*?2)?%?mod_num;
????????d?=?(d?+?c)?%?mod_num;
????}
????ans?as?i32
}

fn?main()?{
????let?nums?=?vec![2,?1,?3];
????let?result?=?sum_subseq_widths(nums);
????println!("{}",?result);?
}

圖片
在這里插入圖片描述

c完整代碼如下:

#include?<stdio.h>
#include?<stdlib.h>
#include?<string.h>

#define?MOD?1000000007

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

int?sumSubseqWidths(int*?nums,?int?numsSize)?{
????qsort(nums,?numsSize,?sizeof(int),?compare);
????long?ans?=?0,?A?=?0,?B?=?0,?C?=?1,?D?=?C;
????for?(int?i?=?1;?i?<?numsSize;?i++)?{
????????A?=?(D?*?nums[i])?%?MOD;
????????B?=?((B?*?2)?%?MOD?+?nums[i?-?1])?%?MOD;
????????ans?=?(ans?+?A?-?B?+?MOD)?%?MOD;
????????C?=?(C?*?2)?%?MOD;
????????D?=?(D?+?C)?%?MOD;
????}
????return?(int)ans;
}

int?main()?{
????int?nums[]?=?{?2,?1,?3?};
????int?numsSize?=?sizeof(nums)?/?sizeof(nums[0]);
????int?result?=?sumSubseqWidths(nums,?numsSize);
????printf("%d\n",?result);?
????return?0;
}

c++完整代碼如下:

#include?<iostream>
#include?<vector>
#include?<algorithm>

using?namespace?std;

int?sumSubseqWidths(vector<int>&?nums)?{
????sort(nums.begin(),?nums.end());
????const?int?mod?=?1000000007;
????long?ans?=?0,?A?=?0,?B?=?0,?C?=?1,?D?=?C;
????for?(int?i?=?1;?i?<?nums.size();?i++)?{
????????A?=?(D?*?nums[i])?%?mod;
????????B?=?((B?*?2)?%?mod?+?nums[i?-?1])?%?mod;
????????ans?=?(ans?+?A?-?B?+?mod)?%?mod;
????????C?=?(C?*?2)?%?mod;
????????D?=?(D?+?C)?%?mod;
????}
????return?static_cast<int>(ans);
}

int?main()?{
????vector<int>?nums{?2,?1,?3?};
????int?result?=?sumSubseqWidths(nums);
????cout?<<?result?<<?endl;?//?輸出:6
????return?0;
}

圖片
在這里插入圖片描述


2023-04-29:一個序列的 寬度 定義為該序列中最大元素和最小元素的差值。 給你一個整的評論 (共 條)

分享到微博請遵守國家法律
宁都县| 罗源县| 崇阳县| 嘉兴市| 绥滨县| 鹤岗市| 高陵县| 建始县| 翁牛特旗| 昆山市| 凯里市| 祁东县| 永登县| 九龙城区| 满城县| 新化县| 娄底市| 河曲县| 宜宾市| 佛学| 灵璧县| 孝感市| 闵行区| 怀柔区| 明水县| 海兴县| 上虞市| 临澧县| 安溪县| 南漳县| 兴城市| 离岛区| 兖州市| 古浪县| 朝阳县| 鄂托克前旗| 江都市| 陇西县| 丹寨县| 黔东| 织金县|