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

1、零移动(238双指针)

使用一个快指针一个慢指针,一个用来填充一个用来查找,最后补零

cpp 复制代码
void moveZeroes(int* nums, int numsSize) 
{
    int slow = 0;
    for(int fast = 0; fast < numsSize; fast ++)
    {
        if(nums[fast] != 0)
        {
            nums[slow++] = nums[fast];
        }
    }
    for(int fast = slow; fast < numsSize; fast ++)
    {
        nums[fast] = 0;
    }
}

2、翻转链表(206链表)

cpp 复制代码
struct ListNode* reverseList(struct ListNode* head) 
{
    struct ListNode *temp1 = NULL;
    struct ListNode *temp2 = head;
    while(temp2 != NULL)
    {
        struct ListNode *temp3 = temp2 -> next;
        temp2 -> next = temp1;
        temp1 = temp2;
        temp2 = temp3;
    }
    return temp1;
}

3、相交链表(160 双指针链表)

cpp 复制代码
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    struct ListNode *pA = headA;
    struct ListNode *pB = headB;
    int Flag = 0;
    while(pA != pB)
    {
        if(pB->next == NULL)
        {
            pB = headA;
            Flag++;
        }
        else
        {
            pB = pB->next;
        }
        if(pA->next == NULL)
        {
            pA = headB;
            Flag++;
        }
        else
        {
            pA = pA->next;
        }
        if(Flag > 2)return NULL;
    }
    return pA;
}

4、回文链表(234链表双指针)

cpp 复制代码
bool isPalindrome(struct ListNode* head) {
    //找中点(Fast走两步,Slow走一步)
    if(head == NULL || head -> next == NULL) return true;
    struct ListNode* pSlow = head;
    struct ListNode* pFast = head;
    
    while(pFast != NULL && pSlow != NULL)
    {
        pFast = pFast -> next;
        //判断奇偶
        if(pFast == NULL)
        {
            pSlow -> next;
            break;
        }
        pFast = pFast -> next;
        pSlow = pSlow -> next;
    }
    //翻转后边的链表
    struct ListNode* temp1 = NULL;
    struct ListNode* temp2 = pSlow;
    while(temp2 != NULL)
    {
        struct ListNode* temp3 = temp2->next;
        temp2 -> next = temp1;
        temp1 = temp2;
        temp2 = temp3;
    }
    //比较
    pFast = head;
    pSlow = temp1;
    while(pSlow != NULL)
    {
        if(pFast -> val != pSlow -> val) return false;
        pFast = pFast->next;
        pSlow = pSlow->next;
    }
    return true;
}   

5、环形列表(141链表双指针)

cpp 复制代码
bool hasCycle(struct ListNode *head) 
{
    if (head == NULL || head->next == NULL) return false;
    struct ListNode *pFast = head->next;
    struct ListNode *pSlow = head;

    while(pFast != pSlow)
    {
        if(pFast == NULL || pFast -> next == NULL)return false;
        pFast = pFast -> next -> next;
        pSlow = pSlow -> next;
    }
    return true;
}

6、盛最多水的容器(11数组双指针)

cpp 复制代码
int maxArea(int* height, int heightSize) {
    int pPre = 0;
    int pBac = heightSize-1;
    int maxArea = height[pPre] > height[pBac] ? height[pBac] * abs(pBac - pPre) : height[pPre] * abs(pBac - pPre);
    int newArea = 0;
    while(pBac > pPre)
    {
        //如果前面长后边短,后面就要找一根比前面长的
        if(height[pPre] >= height[pBac])
        {
            int prehight = height[pBac];
            while((prehight >= height[pBac]) && (pBac > pPre))
            {
                pBac--;
            }
        }
        newArea = height[pPre] > height[pBac] ? height[pBac] * abs(pBac - pPre) : height[pPre] * abs(pBac - pPre);
        maxArea = maxArea > newArea ? maxArea : newArea;
        //反之
        if(height[pPre] < height[pBac])
        {
            int prehight = height[pPre];
            while((prehight >= height[pPre]) && (pBac > pPre))
            {
                pPre++;
            }
        }
        newArea = height[pPre] > height[pBac] ? height[pBac] * abs(pBac - pPre) : height[pPre] * abs(pBac - pPre);
        maxArea = maxArea > newArea ? maxArea : newArea;
    }
    return maxArea;
}
相关推荐
gihigo19986 分钟前
基于蒙特卡洛的异常值剔除(RANSAC + MC置信区间)—MATLAB实现
开发语言·算法·matlab
Asize32 分钟前
数组数据结构底层:从灵活到陷阱
前端·javascript·算法
hairenwangmiao1 小时前
B4041 [GESP202409 四级] 区间排序
算法·排序
人道领域1 小时前
【LeetCode刷题日记】47.全排列Ⅱ
java·开发语言·算法·leetcode
漂流瓶jz1 小时前
UVA-1606 两亲性分子 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·向量·aoapc·算法竞赛入门经典·atan2·浮点
Navigator_Z1 小时前
LeetCode //C - 1095. Find in Mountain Array
c语言·算法·leetcode
心软小念2 小时前
2026软件测试高频面试题
软件测试·面试·职场和发展
不会就选b2 小时前
算法日常・每日刷题--<二分查找>1
算法
「維他檸檬茶」2 小时前
大模型算法学习2026.6.13
学习·算法
叫我:松哥2 小时前
基于Python的共享单车租赁数据分析与预测系统,技术栈flask+boostrap+随机森林+XGBoost
人工智能·python·深度学习·算法·随机森林·数据分析·flask