Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Lonely Pixel I ใน C++

เราได้รับภาพที่ประกอบด้วยพิกเซลสีดำ ('B') และสีขาว ('W') ในรูปแบบ 2D char array เป้าหมายคือหาจำนวน "Lonely Pixel" สีดำ

Lonely Pixel คือ 'B' ที่อยู่ในแถวและคอลัมน์ที่ไม่มี 'B' อื่นอยู่ (คือ 'B' เพียงตัวเดียวในแถวและคอลัมน์นั้น)

ตัวอย่าง

อินพุต:

W W B
W B W
B W W

เอาต์พุต: 3 (ทั้ง 3 'B' ล้วนเป็น lonely pixel)

แนวทางการแก้ปัญหา

นับจำนวน 'B' ในแต่ละแถวและแต่ละคอลัมน์ แล้วตรวจสอบแต่ละ 'B' ว่าแถวและคอลัมน์ของมันมี 'B' รวม 1 ตัวหรือไม่

การนำไปใช้ (Implementation - Optimized)

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int findLonelyPixel(vector<vector<char>>& picture) {
        int n = picture.size();
        int m = n ? picture[0].size() : 0;
        
        vector<int> rowCount(n, 0);
        vector<int> colCount(m, 0);
        
        // นับ B ในแต่ละแถวและคอลัมน์
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (picture[i][j] == 'B') {
                    rowCount[i]++;
                    colCount[j]++;
                }
            }
        }
        
        // ตรวจสอบ lonely pixel
        int count = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (picture[i][j] == 'B' && rowCount[i] == 1 && colCount[j] == 1) {
                    count++;
                }
            }
        }
        return count;
    }
};

int main() {
    Solution ob;
    vector<vector<char>> v = {{'W','W','B'},{'W','B','W'},{'B','W','W'}};
    cout << ob.findLonelyPixel(v);
    return 0;
}

อินพุต

{{'W','W','B'},{'W','B','W'},{'B','W','W'}}

เอาต์พุต

3
หมายเหตุ: โค้ดต้นฉบับใช้วิธีเขียนทับค่าใน picture เองซับซ้อนและอาจผิดพลาด วิธีนี้ชัดเจนกว่าและถูกต้อง