classSolution { public: inthalfQuestions(vector<int>& questions) { int MaxN = 0; int n = questions.size();
for (int i = 0; i < n; i++) MaxN = max(MaxN, questions[i]);
int *vis = newint[MaxN + 1]; memset(vis, 0, sizeof(int) * (MaxN + 1)); for (int i = 0; i < n; i++) vis[questions[i]]++;
sort(vis + 1, vis + 1 + MaxN, cmp); int person = questions.size() >> 1; int Ans = 0; for (int i = 1; i <= MaxN; i++) { if (vis[i]) { Ans++; while (vis[i]) { vis[i]--; person--; if (person == 0) return Ans; } } }
privateintBfs(int x, int y, string[] grid) { Queue<int> qX = new Queue<int>(); Queue<int> qY = new Queue<int>(); qX.Enqueue(x); qY.Enqueue(y); vis[x, y] = 1; int tempVal = 0, flag = 0; while (qX.Count() != 0) { int nowX = qX.Dequeue(), nowY = qY.Dequeue(); tempVal++;
for (int i = 1; i <= 4; i++) { int nextX = nowX + dx[i], nextY = nowY + dy[i]; //超出范围 if (nextX < 0 || nextX > row - 1 || nextY < 0 || nextY > col - 1) continue;
//标记一下这次bfs的主题空间是和走廊接壤的 if (grid[nextX][nextY] == '0') { flag = 1; continue; } if (grid[nextX][nextY] == grid[nowX][nowY]) { //同上,标记一下这个主题空间是和走廊接壤的 if (nextX == 0 || nextX == row - 1 || nextY == 0 || nextY == col - 1) flag = 1;
publicintLargestArea(string[] grid) { row = grid.Length; col = grid[0].Length;
vis = newint[row, col];
int Ans = 0; for (int i = 1; i < row - 1; i++) for (int j = 1; j < col - 1; j++) if (vis[i, j] == 0 && grid[i][j] != '0') Ans = Math.Max(Ans, Bfs(i, j, grid));