zoukankan      html  css  js  c++  java
  • LeetCode "419. Battleships in a Board"

    The follow-up question is fun: "Could you do it in one-pass, using only O(1) extra memory and without modifying the value of the board?"

    When we meet an 'X', we need to check if it is vertical or horizontal: they will never happen at the same time, by problem statement. For horizontal, we simply stripe through right, and plus 1 - however, if our top element is 'X' already, it is a vertical and counter has alread been increased.

    class Solution {
    public:
        int countBattleships(vector<vector<char>>& board) {
            int h = board.size();
            if (!h) return 0;
            int w = board[0].size();
            if (!w) return 0;
            
            int cnt = 0;
            for(int i = 0; i < h; i ++)
            for(int j = 0; j < w; j ++)
            {
                if(board[i][j] == 'X') 
                {
                    // is it a counted vertical case?
                    if(!(i > 0 && board[i -1][j] == 'X'))
                    {
                        cnt ++;
                        // Horizontal
                        while(j < (w - 1) && board[i][j + 1] == 'X') j ++;
                    }
                }
            }
            
            return cnt;
        }
    };
  • 相关阅读:
    【YbtOJ#911】欧拉函数
    【CF590E】Birthday
    打印控件的区别
    RPA教程
    UiPath培训教程
    RPA视频教程
    搭建samba服务
    kvm虚拟机在线扩容
    zabbix监控交换机
    UiPath Level3讲解
  • 原文地址:https://www.cnblogs.com/tonix/p/6254871.html
Copyright © 2011-2022 走看看