过几天要考试了,之前写的也忘了 所以重新刷,之前也超时了两题来着
这次做第三题的思路
一开始问题很大
所以导致不是超时,而是WA
然后花了很多时间之后 重新整理思路 发现AC了
不超时方法:扫描一遍, 相邻的扩展+1
然后前几题,用了不同的思路来做,感觉还是有收获的
另外就是
STL 里面 排序这个记住比较难,到时候手写可能比较麻烦之类的,或者写个冒泡...
sort(a.begin(),a.end(),less<int>())这种写法。
接下里 熟悉一下动态规划,然后就是还有一道超时题
//
// 3.cpp
// leecode
//
// Created by 陆炫宇 on 17/6/27.
// Copyright © 2017年 陆炫宇. All rights reserved.
//
#include <stdio.h>
#include<vector>
#include <queue>
#include<iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
int a[1000][1000];
int count;
void check2(vector<vector<char>>& A,int i,int j){
int h=A.size();
int w=A[0].size();
A[i][j]++;
if(i-1>=0&&A[i-1][j]=='1'){
check(A,i-1,j);
}
if(j-1>=0&&A[i][j-1]=='1'){
check(A,i,j-1);
}
if(i+1<h&&A[i+1][j]=='1'){
check(A,i+1,j);
}
if(j+1<w&&A[i][j+1]=='1'){
check(A,i,j+1);
}
}
void check(vector<vector<char>>& A,int i,int j){
int h=A.size();
int w=A[0].size();
A[i][j]++;
bool flag=true;
if(i-1>=0&&A[i-1][j]!='0'){
if(A[i-1][j]=='1'){
check(A,i-1,j);
}
else{
flag=false;
}
}
if(j-1>=0&&A[i][j-1]!='0'){
if(A[i][j-1]=='1'){
check(A,i,j-1);
}
else{
flag=false;
}
}
if(i+1<h&&A[i+1][j]!='0'){
if(A[i+1][j]=='1'){
check(A,i+1,j);
}
else{
flag=false;
}
}
if(j+1<w&&A[i][j+1]!='0'){
if(A[i][j+1]=='1'){
check(A,i,j+1);
}
else{
flag=false;
}
}
if(flag)
count++;
}
int countConnectedOnes(vector<vector<char>>& A) {
int h=A.size();
int w=A[0].size();
int i,j;
// for(i=0;i<h;i++)
// for(j=0;j<w;j++)
// a[i][h]=A[i][h];
count=0;
for(i=0;i<h;i++){
for(j=0;j<w;j++){
//check
if(A[i][j]=='1'){
count++;
check2(A,i,j);
}
}
}
return count;
}
bool isEqual(TreeNode* p, TreeNode* q) {
if(p!=NULL){
if(q==NULL)
return false;
if(p->val!=q->val)
return false;
}
else{
if(q!=NULL)
return false;
}
queue<TreeNode *> x;
x.push(p);
x.push(q);
while(x.empty()==false){
p=x.front();
x.pop();
q=x.front();
x.pop();
if(p->left!=NULL){
if(q->left==NULL)
return false;
if(q->left->val!=p->left->val)
return false;
x.push(p->left);
x.push(q->left);
}
else{
if(q->left!=NULL)
return false;
}
if(p->right!=NULL){
if(q->right==NULL)
return false;
if(q->right->val!=p->right->val)
return false;
x.push(p->right);
x.push(q->right);
}
else{
if(q->right!=NULL)
return false;
}
}
return true;
}
int F(int k, int n) {
if(k==0)
return n;
int sum=0;
for(int i=1;i<=n;i++){
sum+=F(k-1,i);
}
return sum;
}
//大的先装大的 直到没有位子
int assignConferenceRoom(vector<int>& A, vector<int>& B) {
sort(A.begin(),A.end(),less<int>());
sort(B.begin(),B.end(),less<int>());
int l1=A.size();
int l2=B.size();
int count=0;
int j=0;
for(int i=0;i<l2;i++){
if(j>=l1)
break;
if(A[j]<=B[i]){
j++;
count++;
}
}
return count;
}
};
//1101
//1011
//0111
int main(){
Solution s;
vector<vector<char> > A;
vector<char> B;
B.push_back('1');
B.push_back('1');
B.push_back('0');
B.push_back('1');
vector<char> C;
C.push_back('1');
C.push_back('0');
C.push_back('1');
C.push_back('1');
vector<char> D;
D.push_back('0');
D.push_back('1');
D.push_back('1');
C.push_back('1');
A.push_back(B);
A.push_back(C);
A.push_back(D);
cout<<s.countConnectedOnes(A);
}