贪心算法-点灯问题

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;
	}
相关推荐
Macre Aegir Thrym1 小时前
MINIST——SVM
算法·机器学习·支持向量机
Young_Zn_Cu2 小时前
LeetCode刷题记录(持续更新中)
算法·leetcode
天选之女wow2 小时前
【代码随想录算法训练营——Day31】贪心算法——56.合并区间、738.单调递增的数字、968.监控二叉树
算法·leetcode·贪心算法
lixinnnn.2 小时前
贪心:火烧赤壁
数据结构·c++·算法
小小前端_我自坚强2 小时前
前端算法相关详解
前端·算法
前端 贾公子3 小时前
《Vuejs设计与实现》第 5 章(非原始值响应式方案)下 Set 和 Map 的响应式代理
数据结构·算法
WWZZ20254 小时前
ORB_SLAM2原理及代码解析:SetPose() 函数
人工智能·opencv·算法·计算机视觉·机器人·自动驾驶
小马学嵌入式~4 小时前
堆排序原理与实现详解
开发语言·数据结构·学习·算法
青岛少儿编程-王老师4 小时前
CCF编程能力等级认证GESP—C++6级—20250927
java·c++·算法
一人の梅雨4 小时前
1688 拍立淘接口深度开发:从图像识别到供应链匹配的技术实现
人工智能·算法·计算机视觉