[刷题计划]第二周第五天 | hash

简介: [刷题计划]第二周第五天 | hash

1436. 旅行终点站

1370. 上升下降字符串

1460. 通过翻转子数组使两个数组相等

2068. 检查两个字符串是否几乎相等

1935. 可以输入的最大单词数

1002. 查找共用字符 无题解

1207. 独一无二的出现次数


题解

1436. 旅行终点站


char * destCity(char *** paths, int pathsSize, int* pathsColSize){
    char *hash[100],hashsize = 0,hashnum[100] = {0};
    for(int i = 0;i<pathsSize;i++){//插入hash表以及对应的hashnum
        int j = 0;
        for(j = 0;j < hashsize;j++)
            if(strcmp(hash[j],paths[i][1]) == 0) break;
        if(j == hashsize)   hashnum[hashsize] ++,hash[hashsize++] = paths[i][1];
        else hashnum[j]++;
    }
    for(int i = 0;i<pathsSize;i++){//如果出现在起始就标记为0
        for(int j = 0;j < hashsize;j++)
            if(strcmp(hash[j],paths[i][0]) == 0) hashnum[j] = 0;
    }
     for(int j = 0;j < hashsize;j++)//找到入度为1的点就好了
        if(hashnum[j] == 1) return hash[j];
    return 0;
}

1370. 上升下降字符串 大水题


char * sortString(char * s){
    int hashnum[26] = {0},len = 0,anssize = 0;
    char *ans = malloc(sizeof(char)*510);
    for(int i = 0;s[i];i++){    //初始化hash表
        len++;
        hashnum[s[i]-'a']++;
    }
    while(len){
        for(int i = 0;i<26;i++)
            if(hashnum[i])  ans[anssize++] = i+'a',hashnum[i]--,len--;
        for(int i = 25;i>=0;i--)
            if(hashnum[i])  ans[anssize++] = i+'a',hashnum[i]--,len--;
    }
    ans[anssize++] = 0;
    return ans;
}

1460. 通过翻转子数组使两个数组相等


bool canBeEqual(int* target, int targetSize, int* arr, int arrSize){
    if(targetSize != arrSize)   return false;
    int hash[1001] = {0};
    for(int i = 0;i<targetSize;i++)
        hash[target[i]]++;
    for(int i = 0;i<arrSize;i++)
        if(hash[arr[i]]) hash[arr[i]]--;
        else return false;
    return true;
}

2068. 检查两个字符串是否几乎相等


bool checkAlmostEquivalent(char * word1, char * word2){
    char hash[26] = {0};
    for(int i = 0;word1[i];i++)
        hash[word1[i]-'a']++;
    for(int i = 0;word2[i];i++)
        hash[word2[i]-'a']--;
    for(int i = 0;i<26;i++)
        if(hash[i]>3||hash[i]<-3)   return false;
    return true;
}

1935. 可以输入的最大单词数


int canBeTypedWords(char * text, char * brokenLetters){
    bool hash[26];
    int ans = 0;
    memset(hash,0,sizeof(hash));
    for(int i = 0;brokenLetters[i];i++) //标记坏键盘
        hash[brokenLetters[i]-'a'] = 1;
    for(int i = 0;text[i];i++){
        int flag = 1;
        while(text[i]&&text[i]!=' ')
            if(hash[text[i++]-'a'])   flag = 0;
        if(flag)    ans++;
        if(!text[i]) i--;
    }
    return ans;
}

1207. 独一无二的出现次数


bool uniqueOccurrences(int* arr, int arrSize){
    int hash[2001] = {0};
    bool hashnum[1001];
    memset(hashnum,0,sizeof(hashnum));
    for(int i = 0;i < arrSize;i++)
        hash[arr[i]+1000]++;
    for(int i = 0;i <2001;i++)
        if(hash[i])
            if(!hashnum[hash[i]])   hashnum[hash[i]] = 1;
            else return false;
    return true;
}
相关文章
|
2天前
蓝桥杯真题代码记录(蜂巢
蓝桥杯真题代码记录(蜂巢
9 0
|
存储 机器学习/深度学习 算法
【第十四届蓝桥杯考前速成】必考知识点及代码模板总结,看完至少多拿50分
四、简单图论 1、单源最短路径 2、多源最短路 3、最小生成树 五、动态规划 1、0-1背包 2、完全背包 3、多重背包 4、线性DP 总结
109 0
|
存储 算法 索引
代码随想录算法训练营第六天 | 哈希表 四道简单题
代码随想录算法训练营第六天 | 哈希表 四道简单题
76 0
|
机器学习/深度学习 人工智能 算法
蓝桥杯最后一天复习?各大算法四步法教你轻松秒杀各种题型
大家好,我是泡泡,距离蓝桥杯还有一天时间,我们一定要把握住最后的时间,跟着我,把全部的题型复习整理一遍,让自己不再迷茫不自信,AK蓝桥!
163 0
蓝桥杯最后一天复习?各大算法四步法教你轻松秒杀各种题型
|
算法 定位技术 C语言
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十二天
大家好,我是泡泡,今天的题目比较经典,大家好好掌握
101 0
|
人工智能 移动开发 Shell
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十一天
大家好啊,我是泡泡,今天的题总体来说不难,大家加油
132 0
|
监控
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十三天
大家好,这里是泡泡,今天周日开摆!
77 0
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十三天
|
定位技术
蓝桥杯倒数七天冲刺国一之每日复习第五天
大家好,我是泡泡,今天给大家带来复习的内容,因为复习,所以一带而过啦
75 0
|
定位技术
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十八天
大家好,我是泡泡,昨天有点事,把题解都补上来,5115
88 0
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十八天
蓝桥杯真题31日冲刺国一 | 每日题解报告 第八天
大家好,我是泡泡,今天继续给大家带来题解
112 0