寒假每日总结

哈希表

 两个数组的交集

给定两个数组,编写一个函数来计算它们的交集。

输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。

代码

    int num1[3]={4,9,5},num2[5]={9,4,9,8,4};
    int hash[1001]={0}; // 初始化哈希表
    int i;
    for(i=0;i<num1len;i++){
        hash[num1[i]]=1; // 将一个数组的元素用哈希表记录下来
    }
    for(i=0;i<num2len){
        if(hash[num2[i]]==1){ // 如果当前遍历元素存在于哈希表中
            printf("%d ",num2[i]);
            hash[num2[i]]=0; //防止输出同一元素
        }
    }

贪心

划分字母区间

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。

输入:S = "ababcbacadefegdehijhklij"

输出:[9,7,8]

解释: 划分结果为 "ababcbaca", "defegde", "hijhklij"。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。

代码:

    char ch[25]={"ababcbacadefegdehijhklij"};
    int hash[26]={0}; //初始化哈希表
    int i;
    for(i=0;i<len;i++){
        hash[ch[i]-'a']=i; // 将每个元素的下标存放在表中,保证每次存放的是此元素的最远下标
    }
    int right=hash[0];
    for(i=1;i<len;i++){
        right=max(right,hash[ch[i]-'a']);
        if(i==right){
            printf("%d ",right+1);
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值