關聯容器
獨特 對應
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?