力扣刷题记录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;
}
相关推荐
机器人零零壹1 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
ZhengEnCi4 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是5 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考5 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
nm_zfyjt7 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
w_zero_one8 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼9 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
小超人诞生日记10 小时前
C++ 智能指针的使用及其原理详解
c++·算法
AiNightVision13 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件