Şəkil LeetCode Həllini çevirmək

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Facebook google YahooBaxılıb 88

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Problem bəyanat

Şəklin dəyişdirilməsi LeetCode Həlli – Bizə n ölçülü matris verilir. 2 tapşırığı yerinə yetirməliyik -

  1. şəkli üfüqi çevirin: verilən hər bir sıra deməkdir matris tərsinə çevrilir
  2. şəkli tərsinə çevirin: bütün 0-ları 1-ə çevirin və əksinə

Yaranan matrisi qaytarın.

Verilmiş matris yalnız 0 və ya 1-dən ibarətdir və təsvirin ölçüsü ≤ 20-dir.

Nümunələr və izahatlar

Misal 1:

Input: image = [[1,1,0],[1,0,1],[0,0,0]]
Output: [[1,0,0],[0,1,0],[1,1,1]]
Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]

Misal 2:
Input: image = [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Explanation: First reverse each row: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]

Yanaşma

Bəzi nümunələri nəzərdən keçirdikdən sonra aşağıdakı nümunələri görəcəksiniz:
1) Sətirin birinci və sonuncu dəyərinə baxın. Əgər onlar eynidirsə (1,1 və ya 0,0), onlar çıxışda çevriləcəklər.
Əgər onlar fərqlidirsə (1,0 və ya 0,1), onlar dəyişmir. Siyahının ortasına qədər içəriyə doğru çalışın
bu qaydanın tətbiqi.
2) Əgər sətirdə tək sayda giriş varsa, orta qiymət həmişə dəyişir. Məsələn, əgər len(sətir) = 5,
sonra [2] sətri dəyərləri dəyişməlidir.

Bit istiqamətində XOR –> 0^1 = 1, 1^1 =0

Sətirin əvvəlində i, sətir sonunda isə j indeksi olsun. Əgər dəyərlər
bu indekslər (sətir[i] və sıra[j]) bərabərdir, XOR ^ istifadə edərək onların dəyərlərini çevirin. Dəyərlər bərabər deyilsə, edin
heç nə və i və j-ni ortaya yaxınlaşdırın. i == j olduqda, kod hələ də lazım olduğu kimi icra olunur.

Sual 2 hissədən ibarətdir -

  1. Şəkli çevirmək: matrisi [i] saxlamaq və onu bütün sətirlər üçün tərsinə çevirmək və cavabı başqa bir matris renində saxlamaq üçün sadəcə başqa massiv və ya vektordan istifadə edə bilərik.
  2. Şəklin tərsinə çevrilməsi: bu asan işdir, sadəcə olaraq res[i][j] dəyərini yoxlayın və dəyəri dəyişdirin

Bu yanaşma bizdən nx n ölçüsündə başqa bir matrisi elan etməyi tələb edir. Daha yaxşısını edə bilərikmi?

Şəkildəki hər cərgənin orta elementini çevirməklə elementləri dəyişdirməklə yerində çevirməyə nail ola bilərik. Hər bir sıra üçün orta elementi yerində saxlayın və i-ci elementi (n-1-i)-ci elementlə dəyişdirin. Elementləri çevirmək üçün XOR-dan istifadə edəcəyik.

Biz bilirik ki, 1^1 = 0 və 1^0 = 1

Kodu

Şəkili çevirmək üçün C++ kodu

class Solution {
public:
    vector<vector<int>> flipAndInvertImage(vector<vector<int>>& image) {
        int n = image.size();
        for(auto &row: image) {
            for(int i=0; i<(n+1)/2; i++) {
                int temp = row[i];
                row[i] = row[n-1-i]^1;
                row[n-1-i] = temp^1;
            }
        }
        return image;
    }
};

Şəkili çevirmək üçün Java kodu

class Solution {
    public int[][] flipAndInvertImage(int[][] A) {
        int n = A.length;
        for(int[] row: A) {
            for(int i=0; i< (n+1)/2; i++) {
                int temp = row[i];
                row[i] = row[n-1-i]^1;
                row[n-1-i] = temp^1;
            }
        }
        return A;
    }
}

Şəkili çevirmək üçün vaxt mürəkkəbliyi LeetCode Həlli:

Crack Sistemi Dizayn Müsahibələri
Translate »
1