贪心算法-点灯问题

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;
	}
相关推荐
7yewh3 分钟前
【LeetCode】力扣刷题热题100道(6-10题)附源码 相交链表 回文链表 反转链表 合并链表 移动零(C++)
c语言·数据结构·c++·算法·leetcode·链表·贪心算法
DARLING Zero two♡19 分钟前
【优选算法】Simulation-Phoenix:模拟算法的重生涅槃
java·数据结构·c++·算法·leetcode
忘梓.35 分钟前
解锁动态规划的奥秘:从零到精通的创新思维解析(5)
算法·动态规划
深度混淆1 小时前
C#,图论与图算法,任意一对节点之间最短距离的弗洛伊德·沃肖尔(Floyd Warshall)算法与源程序
算法·c#·图论
就爱学编程1 小时前
重生之我在异世界学编程之算法与数据结构:深入堆篇
java·数据结构·算法
Felix_12159 小时前
2025 西电软工数据结构机考 Tip (By Felix)
算法
飞yu流星10 小时前
C++ 函数 模板
开发语言·c++·算法
pursuit_csdn10 小时前
力扣 74. 搜索二维矩阵
算法·leetcode·矩阵
labuladuo52010 小时前
洛谷 P8703 [蓝桥杯 2019 国 B] 最优包含(dp)
算法·蓝桥杯·动态规划
Milk夜雨11 小时前
C语言冒泡排序教程简介
数据结构·算法·排序算法