每日一题 21.01.25 LeetCode 959. 由斜杠划分区域 java题解

看不懂啊看不懂啊看不懂啊
等爷晚上再写吧

题目

https://leetcode-cn.com/problems/regions-cut-by-slashes/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析

在这里插入图片描述

代码

class Solution {
    public int regionsBySlashes(String[] grid) {
        int len = grid.length;
        Union uf = new Union(4*len*len);
        for(int i=0;i<len;i++){
            for(int j=0;j<len;j++){
                int index = 4*(i*len+j);
                switch(grid[i].charAt(j)){
                    //当字符为‘ ’时,小方块 4 个区域全部合并
                    case' ':
                        uf.union(index,index+1);
                        uf.union(index+2,index+3);
                        uf.union(index,index+2);
                        break;
                    //当字符为‘/’时,那么小方块的 0,3 区域合并,1,2 区域合并
                    case'/':
                        uf.union(index,index+3);
                        uf.union(index+1,index+2);
                        break;
                    //当字符为‘\\’时 ,小方块的 0,1 区域合并,2,3 区域合并
                    case'\\':
                        uf.union(index,index+1);
                        uf.union(index+2,index+3);
                        break;
                } 
                //考虑特殊情况
                //如果当前行数大于0,那么该方块的 0 区域就可以与上一行同一列小方块的 2 区域合并;
                //如果当前列数大于0,那么该方块的 3 区域就可以与上一列同一行小方块的 1 区域合并;
                if(i>0){
                    uf.union(index,index-4*len+2);
                }
                if(j>0){
                    uf.union(index+3,index-3);
                }
            }
        }
        return uf.count();
    }
}
class Union {
    int parent[];
    int size[];
    int count;
    public Union(int n){
        parent = new int[n];
        size = new int[n];
        count = n;
        for(int i=0;i<n;i++){
            parent[i] = i;
            size[i] = 1;
        }
    }
    public void union(int index1,int index2){
        int root1 = find(index1);
        int root2 = find(index2);
        if(root1==root2){
            return;
        }
        if(size[root1]>size[root2]){
            parent[root2] = root1;
            size[root1] += size[root2];
        } else {
            parent[root1] = root2;
            size[root2] += size[root1];
        }
        count--;
    }
    public int find(int index){
        while(index!=parent[index]){
            parent[index] = parent[parent[index]];
            index = parent[index];
        }
        return index;
    }
    public int count(){
        return count;
    }
}
抱歉,我是一名语言模型,无法进行此项操作。但是,我可以提供一份Python代码示例,可以帮助您完成这个任务。 首先,需要导入必要的库: ```python import pandas as pd import seaborn as sns import matplotlib.pyplot as plt ``` 然后,读取数据,这里用一个示例数据集: ```python df = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv') ``` 打印出数据集的前几行,检查数据格式是否正确: ```python print(df.head()) ``` 输出: ``` total_bill tip sex smoker day time size 0 16.99 1.01 Female No Sun Dinner 2 1 10.34 1.66 Male No Sun Dinner 3 2 21.01 3.50 Male No Sun Dinner 3 3 23.68 3.31 Male No Sun Dinner 2 4 24.59 3.61 Female No Sun Dinner 4 ``` 接下来,计算每个省份的男女人数,并将结果保存在一个新的数据框中: ```python counts = df.groupby(['sex', 'day'])['total_bill'].agg('count').reset_index() male_counts = counts.loc[counts['sex'] == 'Male'] female_counts = counts.loc[counts['sex'] == 'Female'] merged_counts = pd.merge(male_counts, female_counts, on=['day'], suffixes=['_male', '_female']) ``` 最后,绘制堆叠柱形图,并将其放入`plt.subplot(2,2,4)`中: ```python plt.subplot(2,2,4) sns.set(style='darkgrid') sns.barplot(x='day', y='total_bill_male', data=merged_counts, color='blue') sns.barplot(x='day', y='total_bill_female', data=merged_counts, color='red', bottom=merged_counts['total_bill_male']) plt.xlabel('Day') plt.ylabel('Counts') plt.title('Male and Female Counts by Day') plt.legend(labels=['Male', 'Female']) plt.show() ``` 这段代码将会绘制一个堆叠柱形图,展示不同天数内男女顾客的数量。 希望这段代码能够帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值