力扣刷题记录3(无算法背景,纯C语言)

13、找字符串中所有字母异位词

cpp 复制代码
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* findAnagrams(char* s, char* p, int* returnSize) {
    * returnSize = 0;
    int pSlow = 0;
    int pFast = 0;
    int slen = strlen(s);
    int plen = strlen(p);
    int sHash[26] = {0};//原始字母的哈希表
    int pHash[26] = {0};//要找字母的哈希表
    int *returnsz = (int *)malloc(sizeof(int)*slen);
    //存入哈希表方便寻找
    for(int i = 0;i<plen;i++)
    {
        pHash[p[i]-'a']++;
    }
    for(pFast = 0; pFast < slen ;pFast++)
    {
        sHash[s[pFast]-'a']++;
        if(pFast - pSlow + 1 == plen)
        {
            int isAnagram  = 1;
            for(int i = 0;i<26;i++)
            {
                if(sHash[i] != pHash[i])
                {
                    isAnagram = 0;
                    break; 
                }
            }
            if(isAnagram)
            {
                returnsz[*returnSize] = pSlow;
                (*returnSize)++;
            }
            pSlow++;
            sHash[s[pFast-plen+1]-'a']--;
        }
    }
    return returnsz;
}

14、爬楼梯(70动态规划 记忆递归)

cpp 复制代码
int climbStairs(int n) 
{
    static int read[46] = {0};
    if(read[n] != 0)
    {
        return read[n];
    }
    if(n <= 2)return n;
    int a = climbStairs(n-1) + climbStairs(n-2);
    read[n] = a;
    return a;      
}

15、杨辉三角(118 动态规划,正常解)

cpp 复制代码
/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int** generate(int numRows, int* returnSize, int** returnColumnSizes) 
{
    * returnSize = numRows;
    int **returnarrays = (int **)malloc(sizeof(int*)*numRows);
    *returnColumnSizes = (int *)malloc(sizeof(int)*numRows);
    returnarrays[0] = (int*) malloc (sizeof(int)*1);
    returnarrays[0][0] = 1;
    returnColumnSizes[0][0] = 1;
    for(int i = 1; i< numRows; i++)
    {
        returnColumnSizes[0][i] = i + 1;
        returnarrays[i] = (int*) malloc (sizeof(int)*(i+1));
        returnarrays[i][0] = 1;
        for(int j = 1; j < i; j++)
        {
            returnarrays[i][j] = returnarrays[i-1][j] + returnarrays[i-1][j-1];
        }
        returnarrays[i][i] = 1;
    }
    return returnarrays;
}

15、只出现一次的数字(136技巧 异或)

cpp 复制代码
int singleNumber(int* nums, int numsSize) 
{
    int result = 0;
    for(int i = 0; i < numsSize ;i++)
    {
        result ^=  nums[i];
    }    
    return result;
}

16、多数元素(169技巧 投票法)

cpp 复制代码
int majorityElement(int* nums, int numsSize) 
{
    int count = 0;
    int val = 0;
    for(int i = 0; i < numsSize; i++)
    {
        if(count == 0)
        {
            val = nums[i];
            count++;
        }
        else if(val == nums[i])count++;
        else count--;
    }
    return val;
}
相关推荐
2601_954526753 小时前
【工业传感与算法实战】温漂补偿与零点抗漂破局:基于二阶多项式拟合的 C/C++ 边缘校准算法,深度拆解“压力变送器什么牌子好”的技术硬指标
c语言·c++·算法
qq_448011164 小时前
C语言中的变量和函数的定义与声明
android·c语言·开发语言
叩码以求索4 小时前
浅谈:算法萌新如何高效刷题应对面试(一)
算法·面试·职场和发展
c238566 小时前
把 C++ 内存分配拆透:new 与 malloc 的三层血缘
开发语言·c++·算法
aaaameliaaa7 小时前
指针之总结
c语言·笔记·算法
宵时待雨7 小时前
优选算法专题9:哈希表
数据结构·算法·散列表
txzrxz7 小时前
最短路问题——Dijkstra 算法
数据结构·c++·算法·最短路·优先队列
gwf2167 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
agathakuan8 小时前
Wireshark 解密並導出TLS 1.2 / TLS 1.3 明文的方法(可控制 Client 端)
c语言·wireshark·ssl·openwrt
caimouse8 小时前
protoc-gen-c 支持 proto3 `optional` 关键字修改记录
c语言·学习