[刷题计划]第二周第五天 | 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;
}
相关文章
|
存储 算法 数据库
十天学完基础数据结构-第一天(绪论)
十天学完基础数据结构-第一天(绪论)
63 0
|
算法 Android开发 Kotlin
LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
117 0
LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗
|
存储 算法 索引
代码随想录算法训练营第六天 | 哈希表 四道简单题
代码随想录算法训练营第六天 | 哈希表 四道简单题
96 0
|
存储 算法
代码随想录算法训练营第七天 | 哈希表
代码随想录算法训练营第七天 | 哈希表
127 0
|
机器学习/深度学习 定位技术
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十六天
大家好,我是泡泡,今天的题目很合理,很多模板,大家多多掌握,学习一下用各种思路解题,灵活多变!
275 0
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十六天
|
机器学习/深度学习 人工智能 算法
蓝桥杯最后一天复习?各大算法四步法教你轻松秒杀各种题型
大家好,我是泡泡,距离蓝桥杯还有一天时间,我们一定要把握住最后的时间,跟着我,把全部的题型复习整理一遍,让自己不再迷茫不自信,AK蓝桥!
237 0
蓝桥杯最后一天复习?各大算法四步法教你轻松秒杀各种题型
|
Java
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十九天
大噶好,我系泡泡,今天的题难度很高(我是fw) 有能力的自己搞一下,省赛的同学今天就当放松一下
178 0
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十九天
|
决策智能
蓝桥杯倒数七天冲刺国一之每日复习第四天
我是泡泡,因为是复习之前做过的,所以题解一带而过了,大家坚持!
83 0
|
定位技术
蓝桥杯倒数七天冲刺国一之每日复习第五天
大家好,我是泡泡,今天给大家带来复习的内容,因为复习,所以一带而过啦
106 0
|
机器学习/深度学习 人工智能
蓝桥杯倒数七天冲刺国一之每日复习第三天
大家好,我是泡泡,今天继续复习
168 0