58同城笔试(9-14)

1 求疫情聚集区域的个数
其实就是求连续的1的区域个数,简单DFS
int mapp[110][110];

int dfs(int rows, int cols, int x, int y){
    if((x < 0) || (x >= cols) || (y < 0) || (y >= rows) || mapp[y][x] == 0)
        return 0;
    mapp[y][x] = 0;
    return dfs(rows, cols, x - 1, y) + dfs(rows, cols, x + 1, y) + dfs(rows, cols, x, y - 1) + dfs(rows, cols, x, y + 1) + 1;
}

int main(){
    
	int m, n;
    scanf("%d %d", &m, &n);
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++)
            scanf("%d", &mapp[i][j]);
    }
    int count = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++)
            if(mapp[j][i] == 1)
                if(dfs(m, n, i, j) >= 1)
                    count++;    
    }
    printf("%d\n", count);
    return 0;

}
2 将二叉树进行二维打印

剑指offer原题,按层打印二叉树。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:    
    	queue<TreeNode *> queueTreeNode;
        vector<vector<int> > Print(TreeNode* pRoot){
            vector<vector<int> > ans;
            vector<int> vecNew;
            if(pRoot == nullptr)
                return ans;
            int nextLevel = 0;
            int toBePrinted = 1;
            queueTreeNode.push(pRoot);
            while(queueTreeNode.size() > 0){
                TreeNode* pNode = queueTreeNode.front();
                cout<<pNode->val<<" ";
                vecNew.push_back(pNode->val);
                queueTreeNode.pop();
                if(pNode->left != nullptr){
                    queueTreeNode.push(pNode->left);
                    nextLevel++;
                }
                if(pNode->right != nullptr){
                    queueTreeNode.push(pNode->right);
                    nextLevel++;
                }
                toBePrinted--;
                if(toBePrinted == 0){
                    ans.push_back(vecNew);
                    vecNew.clear();
                    cout<<endl;
                    toBePrinted = nextLevel;
                    nextLevel = 0;
                }
            }
            return ans;
        }
    
};
3 求最小未出现的正整数

巧用TreeSet,暴力求解。

  • TreeSet不重复的排序的集合

public static int firstMissingPositive (int[] nums) {
	// write code here
    Set<Integer> mySet = new TreeSet<Integer>();
    for(int i = 0; i < nums.length; i++)
    	mySet.add(num[i]);
    int ans = 1;
    // 循环到nums.length + 1以防出现1,2,3,4则返回5
    while(ans < nums.length + 1){
    	if(!mySet.contains(ans))
         	return ans;
        ans++;
    }
    return ans;
}




#58集团##笔试题目#
全部评论
开发岗和算法的编程题几乎一样的
点赞 回复 分享
发布于 2020-09-14 22:01
这么做第三题,哪里有问题啊,一直是0.8
点赞 回复 分享
发布于 2020-09-14 22:07

相关推荐

Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
评论
点赞
4
分享
牛客网
牛客企业服务