校招算法笔面试 | 校招笔面试真题-安置路灯

题目

题目链接

题目难度:二星
考察点:贪心

  1. 分析:
    对于这道题来说,如果在第i个位置上安装路灯,那么它能够照亮的地方就是i-1, i和i+1,那么安装路灯最少的方法就是在三个位置的中间设置路灯,即如果第i个位置为’.‘, 那么显然在 i+1 处安装路灯是最好的,它可以照到位置i, i+1和i+2,这样能够最大程度的减少路灯的数目。
    例如下图:
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    算法实现:
    (1) 设置遍历指针i=0;
    (2) 如果第i个位置为’.‘,ans++(在i+1处放置路灯,可以照亮i, i+1, i+2),然后从第i+3位置处继续遍历,即i=i+3;
    (3) 如果第i个位置为’x’,那么指针i++。
    (4) 一直遍历字符串末尾结束,最后输出ans即可。

  2. 复杂度分析:
    时间复杂度:O(n)
    空间复杂度:O(1)

  3. 代码:

 #include <bits stdc++.h>
using namespace std;
int main() {
    int T; cin&gt;&gt;T;
    while(T--) {
        int n; cin&gt;&gt;n;
        string s; cin&gt;&gt;s;
        int len = s.size(), i = 0, ans = 0;
        while(i &lt; len) {
            if(s[i] == '.') {
                ans++;
                i = i+3;
            }
            else i++;
        }
        cout&lt;</bits>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值