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

Lonely Pixel I ใน C++


สมมติว่าเรามีภาพที่ประกอบด้วยพิกเซลขาวดำ เราต้องหาจำนวนพิกเซลที่โดดเดี่ยวสีดำ รูปภาพนี้แสดงโดยอาร์เรย์ถ่าน 2 มิติที่ประกอบด้วย 'B' และ 'W' สำหรับพิกเซลขาวดำตามลำดับ

พิกเซลโดดเดี่ยวสีดำจริงๆ แล้วคือ 'B' ซึ่งอยู่ที่ตำแหน่งเฉพาะที่แถวเดียวกันและคอลัมน์เดียวกันไม่มีพิกเซลสีดำอื่นใด

หากอินพุตเป็นแบบ −

ผลลัพธ์จะเป็น 3 เพราะทั้งสาม 'B' เป็นพิกเซลโดดเดี่ยวสีดำ

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • n :=ขนาดภาพ

  • m :=(ถ้า n ไม่ใช่ศูนย์ แสดงว่าขนาดคอลัมน์ มิฉะนั้น 0)

  • กำหนดแถวอาร์เรย์สองแถวและคอลัมน์ขนาด n

  • ret :=0, firstRow :=0

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • สำหรับการเริ่มต้น j :=0 เมื่อ j

      • ถ้า picture[i, j] เหมือนกับ 'B' แล้ว −

        • ถ้า picture[0, j] <'Y' และ picture[0, j] ไม่เท่ากับ 'V' ดังนั้น −

          • (เพิ่มรูปภาพ[0, j] ขึ้น 1)

        • ถ้าฉันเหมือนกับ 0 แล้ว −

          • (เพิ่มแถวแรก 1)

        • มิฉะนั้น เมื่อ picture[i, 0] <'Y' และ picture[i, 0] ไม่เท่ากับ 'V' ดังนั้น −

          • (เพิ่มรูปภาพ[i, 0] โดย 1)

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • สำหรับการเริ่มต้น j :=0 เมื่อ j

      • ถ้ารูปภาพ[i, j] <'W' และ (รูปภาพ[0, j] เหมือนกับ 'C' หรือรูปภาพ[0, j] เหมือนกับ 'X') ดังนั้น −

        • ถ้าฉันเหมือนกับ 0 แล้ว −

          • ret :=(ถ้า ret + firstRow เหมือนกับ 1 แล้ว 1 มิฉะนั้น 0)

        • มิฉะนั้น เมื่อ picture[i, 0] เหมือนกับ 'C' หรือ picture[i, 0] เหมือนกับ 'X' ดังนั้น −

          • (เพิ่มการถอยกลับโดย 1)

  • รีเทิร์น

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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< row(n);
      vector<int< col(m);
      int ret = 0;
      int firstRow = 0;
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            if (picture[i][j] == 'B') {
               if (picture[0][j] < 'Y' && picture[0][j] != 'V'){
                  picture[0][j]++;
               }
               if (i == 0)
                  firstRow++;
               else if (picture[i][0] < 'Y' && picture[i][0] != 'V') {
                  picture[i][0]++;
               }
            }
         }
      }
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            if (picture[i][j] < 'W' && (picture[0][j] == 'C' || picture[0][j] == 'X')) {
               if (i == 0)
                  ret += firstRow == 1 ? 1 : 0;
               else if (picture[i][0] == 'C' || picture[i][0] == 'X')
                  ret++;
            }
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<char>> v = {{'W','W','B'},{'W','B','W'},{'B','W','W'}};
   cout << (ob.findLonelyPixel(v));
}

อินพุต

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

ผลลัพธ์

3