贪心算法-点灯问题

1、题目描述

给定一个字符串str,只由 'X' 和 '.' 两种字符构成。'X' 表示墙,不能放灯,点亮不点亮都可;'.' 表示居民点,可以放灯,需要点亮。如果灯放在i位置,可以让 i-1,i 和 i+1 三个位置被点亮。返回如果点亮str中所有需要点亮的位置,至少需要几盏灯。

2、解题思路

这题我们可以用谈心思想 分情况来去讨论:

(1)i 位置是 'X',不管,来到 i + 1位置

(2)i 位置是 '.' ,i + 1是 'X',i 位置需要放灯,来到 i + 2位置

(3)i 位置是 '.' ,i + 1是 '.',i + 2是 '.',i + 1 位置需要放灯,来到 i + 3位置(此步即是贪心)

(4)i 位置是 '.' ,i + 1是 '.',i + 2是 'X',i 或 i + 1 位置需要放灯,来到 i + 3位置

代码实现:

java 复制代码
	public static int minLight2(String road) {
		char[] str = road.toCharArray();
		int i = 0;
		int light = 0;
		while (i < str.length) {
			if (str[i] == 'X') {
				i++;
			} else {
				light++;
				if (i + 1 == str.length) {
					break;
				} else { // 有i位置 i+ 1 X .
					if (str[i + 1] == 'X') {
						i = i + 2;
					} else {
						i = i + 3;
					}
				}
			}
		}
		return light;
	}
相关推荐
布莱克6059 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
D e re k ZH12 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
石小石Orz12 小时前
AI 正在蚕食我们的编码能力
前端·后端·算法
民乐团扒谱机14 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
青少儿编程课堂14 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
武子康16 小时前
Qwen-Drive 到底是什么:4B 级 VLM 如何成为驾驶策略底座
人工智能·算法·机器学习
zh_xuan17 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
机 _ 长18 小时前
05 智算运维|8 张卡怎么才算「捆成一张」:NCCL 实测与拓扑
运维·人工智能·算法·智算运维
早起CaiCai18 小时前
【2023-01 OM】利用深度学习算法融合异质观测实现海洋场降尺度
人工智能·深度学习·算法