關聯容器

獨特 對應

set (每個元素只會有一種)

/*
 * NeetCode
 * Valid Sudoku
 * LeetCode
 * 36. Valid Sudoku
*/
class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        set<char>a[9];
        set<char>b[9];
        set<char>c[9];
        //
        for(int i=0;i<9;++i){
            for(int j=0;j<9;++j){
                int num = board[i][j];
                int k = (i/3)*3+(j/3);
                if(num!='.'){
                    if(a[i].find(num)!=a[i].end()){
                        return false;
                    }
                    if(b[j].find(num)!=b[j].end()){
                        return false;
                    }
                    if(c[k].find(num)!=c[k].end()){
                        return false;
                    }
                    a[i].insert(num);
                    b[j].insert(num);
                    c[k].insert(num);
                }
            }
        }
        return true;
    }
}

map (對應表)

/*
 * AP325
 * P-2-2C. 離散化 – set/map (*)
*/
#include <bits/stdc++.h> 
using namespace std; 
#define N 100010 
 
int main() { 
    int a[N],n, k; 
    cin >> n; 
    for (int i=0;i<n;i++){
        cin >> a[i]; 
    }
    map<int,int> S; 
    for (int i=0;i<n;i++) {
        S[a[i]] = 0;
    }
    int r=0; 
    // 離散序列
    for (auto it=S.begin(); it!=S.end(); ++it) { // 不重複有序 一直+1
        it->second = r; 
        r+=1;
    } 
    for (int i=0;i<n;i++) {  // 重複有序 尋找替換成 離散序列
        a[i] = S.find(a[i])->second;
    }
    for (int i=0;i<n-1;i++){
		cout << a[i];
    } 
	cout << a[n-1] << endl;
} 

Last updated

Was this helpful?