网易首页 > 网易号 > 正文 申请入驻

2026-09-10:维持亮度的最小总能量。用go语言,有 n 个灯泡排成一行,位置编号从 0 到 n-1。时间按离散单位划分,每个单位时间都可以独立

0
分享至

2026-09-10:维持亮度的最小总能量。用go语言,有 n 个灯泡排成一行,位置编号从 0 到 n-1。时间按离散单位划分,每个单位时间都可以独立决定每个灯泡是开还是关。一个开启的灯泡会照亮它自己的位置,以及左右相邻的位置,如果这些位置存在的话。一个单位时间内的照明总量,等于至少被一个开启灯泡照到的不同位置数量;同一个位置即使被多个灯泡照亮,也只算一次。

另外给定一个亮度要求 brightness,以及若干个闭时间区间。对于被这些区间中任意一个覆盖到的单位时间,照明总量必须达到或超过 brightness。对于没有被任何区间覆盖的单位时间,没有照明要求,灯泡可以全部关闭。

每开启一个灯泡一个单位时间,就消耗 1 单位能量。目标是在满足所有区间内照明要求的前提下,使总能量消耗尽可能小,并返回这个最小总能量。

1 <= n <= 1000000。

1 <= brightness <= n。

1 <= intervals.length <= 100000。

intervals[i] == [starti, endi]。

0 <= starti <= endi <= 1000000000。

输入: n = 5, brightness = 5, intervals = [[6,12]]。

输出: 14。

解释:

开启位于位置 1 和 4 的灯泡。

当前序列状态:0 1 0 0 1.

全部 5 个位置都被照亮,因此达到了要求的亮度。

有效区间长度为 12 - 6 + 1 = 7,因此总能量为 2 * 7 = 14。

题目来自力扣3951。

代码逻辑分步详解 第1步:排序区间

  • • 输入intervals是若干闭区间[start, end],表示这些时间单位必须满足亮度要求。

  • • 首先按区间的左端点从小到大排序,这是为了后续合并重叠区间。

第2步:合并重叠区间(求总覆盖时间长度)
  • • 因为如果两个区间在时间上有重叠,那么重叠部分只需要满足一次亮度要求即可(但实际照明是连续时间,不需要重复计算)。

  • • 合并规则:

    • • 初始化left=0,right=-1(表示当前合并区间为空)。

    • • 遍历排序后的每个区间[p[0], p[1]]:

      • • 如果当前区间的左端点p[0]≤ 当前合并区间的右端点right,说明有重叠或相邻,可以合并,更新right = max(right, p[1])。

      • • 否则(不相交),则说明当前合并区间结束,将它的长度(right - left + 1)累加到sumLen,然后开始一个新的合并区间left=p[0], right=p[1]。

  • • 遍历结束后,将最后一个合并区间的长度也累加到sumLen。

  • •结果:sumLen是所有必须满足亮度要求的时间单位总数(去重后)。

第3步:计算单时间单位所需最少灯泡数
  • • 一个灯泡最多照亮 3 个位置(自身+左右)。

  • • 要照亮至少brightness个不同位置,最少需要bulbs = ceil(brightness / 3)个灯泡。

  • • 代码中(brightness + 2) / 3就是向上取整。

第4步:计算最小总能量
  • • 每个时间单位需要bulbs个灯泡,共sumLen个时间单位。

  • • 总能量 =bulbs × sumLen。

  • • 返回int64类型,因为结果可能较大。

针对给定示例的模拟计算
  • • 输入:n=5, brightness=5, intervals=[[6,12]]

  • • 排序(只有一个区间,无需合并):

    • •sumLen = 12 - 6 + 1 = 7

  • •bulbs = (5+2)/3 = 7/3 = 2.333... → 2(向上取整)

  • • 总能量 =2 × 7 = 14,与题目输出一致。

时间复杂度分析
  • •排序:O(k log k),其中k = len(intervals),最多 100000。

  • •合并区间遍历:O(k)。

  • • 整体时间复杂度:O(k log k),主要受排序限制。

额外空间复杂度分析
  • • 排序通常需要O(log k)的栈空间(递归深度)或O(1)的原地排序(如 Go 的slices.SortFunc使用快速排序,平均栈空间O(log k))。

  • • 除了输入数组外,只使用了少数几个变量(sumLen,left,right,bulbs),额外空间为O(1)(忽略排序的栈开销)。

  • • 若严格考虑排序辅助空间,可认为是O(log k),但通常描述为O(1)额外空间(不计输入和排序临时空间)。

最终答案总结
  • •过程:排序区间 → 合并求总覆盖时间长度 → 计算所需最少灯泡数 → 乘积得最小总能量。

  • •时间复杂度:O(k log k),k 为区间数量。

  • •额外空间复杂度:O(1)(或O(log k)含排序栈空间,但通常视为常数级)。

Go完整代码如下:

package main

import (
"fmt"
"slices"
)

func minEnergy(_, brightness int, intervals [][]int) int64 {
slices.SortFunc(intervals, func(p, q []int) int { return p[0] - q[0] }) // 按照左端点从小到大排序

// 56. 合并区间(只计算区间长度之和)
sumLen := 0
left, right := 0, -1
for _, p := range intervals {
if p[0] <= right { // 左端点在合并区间内,可以合并
right = max(right, p[1]) // 更新合并区间的右端点
} else { // 不相交,无法合并
sumLen += right - left + 1
left, right = p[0], p[1] // 新的合并区间
}
}
sumLen += right - left + 1

bulbs := (brightness + 2) / 3 // 至少要开启 bulbs 个灯泡
return int64(bulbs * sumLen)
}

func main() {
n := 5
brightness := 5
intervals := [][]int{{6, 12}}
result := minEnergy(n, brightness, intervals)
fmt.Println(result)
}

Python完整代码如下:

# -*-coding:utf-8-*-

def min_energy(_, brightness: int, intervals: list[list[int]]) -> int:
# 按左端点从小到大排序
intervals.sort(key=lambda x: x[0])

# 合并区间,并计算所有区间的总长度(闭区间长度)
total_len = 0
left, right = 0, -1
for start, end in intervals:
if start <= right: # 当前区间与合并区间重叠
right = max(right, end)
else: # 开始新的合并区间
total_len += right - left + 1
left, right = start, end
total_len += right - left + 1 # 加上最后一个合并区间

# 至少需要开启的灯泡数量:ceil(brightness / 3)
bulbs = (brightness + 2) // 3

return bulbs * total_len

if __name__ == "__main__":
n = 5
brightness = 5
intervals = [[6, 12]]
result = min_energy(n, brightness, intervals)
print(result)

C++完整代码如下:

  




using namespace std;

long long minEnergy(int /* n 未使用 */, int brightness, vector int >>& intervals) {
// 按左端点从小到大排序
sort(intervals.begin(), intervals.end(),
[]( const vector< int >& a, const vector< int >& b) {
return a[ 0 ] < b[ 0 ];
});

// 合并区间,计算所有区间的总长度(闭区间)
long long sumLen = 0 ;
int left = 0 , right = -1 ;
for ( const auto& p : intervals) {
int start = p[ 0 ], end = p[ 1 ];
if (start <= right) { // 区间重叠或相邻,可以合并
right = max(right, end);
} else { // 开始新的合并区间
sumLen += right - left + 1 ;
left = start;
right = end;
}
}
sumLen += right - left + 1 ; // 加上最后一个合并区间

// 至少需要开启的灯泡数量:ceil(brightness / 3)
long long bulbs = (brightness + 2 ) / 3 ;

return bulbs * sumLen;
}

int main() {
int n = 5 ;
int brightness = 5 ;
vector int >> intervals = {{ 6 , 12 }};

long long result = minEnergy(n, brightness, intervals);
cout << result << endl;

return 0 ;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
华为Mate90系列价格公布:标准版5999元起、Pro版6999元起、Pro Max版9499元起、Pro Max典藏版10999元起、RS非凡大师版12999元起

华为Mate90系列价格公布:标准版5999元起、Pro版6999元起、Pro Max版9499元起、Pro Max典藏版10999元起、RS非凡大师版12999元起

台州交通广播
2026-10-01 11:52:51
伊总统回国后,革命卫队致信美国:最高领袖已阵亡,百姓不该买单

伊总统回国后,革命卫队致信美国:最高领袖已阵亡,百姓不该买单

真正能保护你的
2026-10-01 21:27:27
全球震动!哈佛研究证实:中国不是崛起,而是正在慢慢回归

全球震动!哈佛研究证实:中国不是崛起,而是正在慢慢回归

叹为观止易
2026-09-24 17:14:28
马斯克的星链覆盖150多个国家,为何始终无法进入中国?

马斯克的星链覆盖150多个国家,为何始终无法进入中国?

壹知眠羊
2026-09-27 07:07:22
王楚钦再创历史,将成第一个把世界第一拱手送给日本的国乒运动员

王楚钦再创历史,将成第一个把世界第一拱手送给日本的国乒运动员

人类的关注
2026-09-06 04:32:21
苹果三款新品突然官宣:10月13日,正式发布

苹果三款新品突然官宣:10月13日,正式发布

科技堡垒
2026-10-01 09:16:52
拉塞尔加盟上海遭嘲讽!两大NBA球星喊话:打CBA从来都不丢人

拉塞尔加盟上海遭嘲讽!两大NBA球星喊话:打CBA从来都不丢人

体育见习官
2026-10-01 15:39:39
亚运逆转头号种子!王曦雨:首盘0-5时想到郑钦文 好榜样给我力量

亚运逆转头号种子!王曦雨:首盘0-5时想到郑钦文 好榜样给我力量

我爱英超
2026-10-01 21:23:35
正式退出!孙颖莎发声官宣告别,王楚钦心里明白,曾表态打到40岁

正式退出!孙颖莎发声官宣告别,王楚钦心里明白,曾表态打到40岁

翰飞观事
2026-09-28 16:39:22
亚运最快一金!储守宏4.714秒破亚运纪录 夺攀岩男子速度赛金牌

亚运最快一金!储守宏4.714秒破亚运纪录 夺攀岩男子速度赛金牌

醉卧浮生
2026-10-01 19:52:33
拉夫罗夫主动让出位子,功成身退时机刚好,普京早已安排别人顶上

拉夫罗夫主动让出位子,功成身退时机刚好,普京早已安排别人顶上

深析古今
2026-10-01 05:24:44
新一轮联合国秘书长投票结束,中国倾向的候选人,拿到巨大优势?

新一轮联合国秘书长投票结束,中国倾向的候选人,拿到巨大优势?

奇思妙想生活家
2026-10-01 07:53:12
街头连打架都少见,国家为何突然再掀扫黑风暴?真相让人背后发凉

街头连打架都少见,国家为何突然再掀扫黑风暴?真相让人背后发凉

网络易不易
2026-08-24 10:31:58
俄罗斯媒体确认了:日本已向俄罗斯承诺,与美国和澳大利亚的演习结束后撤走美国堤丰导弹系统,但俄罗斯怀疑日本会在演习后留下堤丰系统

俄罗斯媒体确认了:日本已向俄罗斯承诺,与美国和澳大利亚的演习结束后撤走美国堤丰导弹系统,但俄罗斯怀疑日本会在演习后留下堤丰系统

吉刻新闻
2026-09-28 22:32:28
泪目!中国女网25岁1米82王牌涅槃重生:逆转头号种子,冲亚运冠军

泪目!中国女网25岁1米82王牌涅槃重生:逆转头号种子,冲亚运冠军

李喜林篮球绝杀
2026-10-01 19:40:51
美的集团太子又栽电影上了,3亿投资《敦煌英雄》打水漂?

美的集团太子又栽电影上了,3亿投资《敦煌英雄》打水漂?

文娱春秋Plus
2026-09-30 09:18:03
俄军单日伤亡破2千人创历史新高!“下水道”战术被乌军识破

俄军单日伤亡破2千人创历史新高!“下水道”战术被乌军识破

项鹏飞
2026-09-30 19:38:08
谁都没想到,刘欢离世刚过5天,44岁郎朗竟因一个举动口碑暴涨!

谁都没想到,刘欢离世刚过5天,44岁郎朗竟因一个举动口碑暴涨!

大眼妹妹
2026-10-01 06:18:56
水谷隼展望奥运混团:想要击败中国队,双打更容易拿分更容易爆冷

水谷隼展望奥运混团:想要击败中国队,双打更容易拿分更容易爆冷

排球黄金眼
2026-10-01 11:18:37
台湾退役中将帅化民表示,张学良被关一生不能算冤,因为西安事变那一夜,他差点让蒋介石从奉化带来的嫡系护卫全军覆没

台湾退役中将帅化民表示,张学良被关一生不能算冤,因为西安事变那一夜,他差点让蒋介石从奉化带来的嫡系护卫全军覆没

谈史论今1
2026-09-06 20:22:18
2026-10-02 03:23:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1490文章数 83关注度
往期回顾 全部

科技要闻

5999元起!华为Mate 90系列发布

头条要闻

桂林市文促会深夜发布致歉信:向阿丘诚恳致歉

头条要闻

桂林市文促会深夜发布致歉信:向阿丘诚恳致歉

体育要闻

“今天的表现,我们可以昂首离开球场”

娱乐要闻

奚梦瑶晒四太豪礼!22只龙凤镯近300万

财经要闻

智谱发上亿Token 能挽回开发者信任吗?

汽车要闻

2027款极氪001将于明年一季度上市 现款猎装同步推新配色

态度原创

本地
艺术
房产
公开课
军事航空

本地新闻

中秋逛白塔寺,体验国医妙荟雅集

艺术要闻

他历尽苦难,却画出最令人心碎的女人!艾斯特凡笔下的女性,美到不敢直视!

房产要闻

4000+/平!华侨城,直接把海口楼市的地板给掀了!

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

美防长宣布组建“自主作战司令部”

无障碍浏览 进入关怀版