【每日刷题】Day86

【每日刷题】Day86

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 118. 杨辉三角 - 力扣(LeetCode)

2. 数组中出现次数超过一半的数字_牛客题霸_牛客网 (nowcoder.com)

3. 26. 删除有序数组中的重复项 - 力扣(LeetCode)

1. 118. 杨辉三角 - 力扣(LeetCode)

//思路:vector类的运用。

int** generate(int numRows, int* returnSize, int** returnColumnSizes)

{

    int** arr = (int**)malloc(sizeof(int*)*numRows);

    *returnSize = numRows;

    *returnColumnSizes = (int*)malloc(sizeof(int)*numRows);

    for(int i = 0;i<numRows;i++)

    {

        arr[i] = (int*)malloc(sizeof(int)*(i+1));

        (*returnColumnSizes)[i] = i+1;

        arr[i][0] = 1;

        arr[i][i] = 1;

        for(int j = 1;j<i;j++)

        {

            arr[i][j] = arr[i-1][j-1]+arr[i-1][j];

        }

    }

    return arr;

}

2. 数组中出现次数超过一半的数字_牛客题霸_牛客网 (nowcoder.com)

//哈希记数+迭代器遍历。

class Solution {

public:

    int MoreThanHalfNum_Solution(vector<int>& numbers)

    {

        int flag = 0;

        int hash[10001] = {0};

        vector<int>::iterator it = numbers.begin();

//迭代器遍历

        while(it!=numbers.end())

        {

//记录每个数字出现的次数

            hash[*it]+=1;

//有出现超过一半的数字直接跳出不用继续遍历

            if(hash[*it]>((numbers.end()-numbers.begin())/2))

            {

                flag = *it;

                break;

            }

            it++;

        }

        return flag;

    }

};

3. 26. 删除有序数组中的重复项 - 力扣(LeetCode)

//思路:快慢双指针遍历。两指针指向内容相容时继续遍历,当不相同时,记录慢指针的内容。当快指针遍历到末尾时如果两个指针指向内容相同,则需要把慢指针指向内容存储起来。

int removeDuplicates(int* nums, int numsSize)

{

    int* newnums =  (int*)malloc(numsSize*sizeof(int));

    int k = 0;

    int i = 0;

    int pf1 = 0;

    int pf2 = 1;

    if(numsSize==1)

    {

        newnums[k++] = nums[0];

    }

    if(numsSize==2)

    {

        if(nums[pf1]==nums[pf2])

        {

            newnums[k++] = nums[pf1];

            pf1++;

            pf2++;

        }

        else

        {

            newnums[k++] = nums[pf1];

            newnums[k++] = nums[pf2];

            pf1++;

            pf2++;

        }

    }

    while(pf2<numsSize)

    {

//指针内容相同时,判断快指针是否遍历到了末尾,如果快指针遍历到了末尾则要将慢指针指向内容存储

        if(nums[pf1]==nums[pf2])

        {

            if(pf2==numsSize-1)

            {

                newnums[k++] = nums[pf1];

            }

            pf1++;

            pf2++;

            continue;

        }

        else

        {

//两指针指向内容不相同时,先将慢指针内容存储

            newnums[k++] = nums[pf1];

//判断快指针是否到了末尾,如果到了,则需要将快指针指向内容也存储起来

            if(pf2==numsSize-1)

            {

                newnums[k++] = nums[pf2];

            }

        }

        pf1++;

        pf2++;

    }

//最后输出新数组

    for(i = 0;i<k;i++)

    {

        nums[i] = newnums[i];

    }

    return k;

}

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值