力扣 算法题

7.整数翻转(9.回文数的核心一样)

在这里插入图片描述

int reverse(int x)
{
    double i = 0;//这里只要是字数范围大于int型即可(long long也可)
    while (x)
    {
        int a = x % 10;
        x /= 10;
        i = i * 10 + a;
    }
    return i > INT_MAX || i < INT_MIN ? 0 : (int)i;//越界输出0不越界输出翻转数字
}

在这里插入图片描述

9.回文数

在这里插入图片描述

bool isPalindrome(int x)
{
    int tmp;
    long long ret=0;
    int bax=x;
    if(x<0)
    {
        return false;
    }
    while(x)
    {
        tmp=x%10;
        x/=10;
        ret=tmp+ret*10;
    }
    if(ret==bax)
    {
        return true;


    }
    else
    {
        return false;
    }

}

70.爬楼梯

在这里插入图片描述

此代码是用斐波那契数列的优化
空间复杂度为O(1)

int climbStairs(int n)
{
    int p=0;
    int q=0;
    int r=1;
    for(int i=1;i<=n;i++)
    {
        p=q;
        q=r;
        r=p+q;
    }
    return r;

}

724.寻找数组的中心下标

在这里插入图片描述

int pivotIndex(int* nums, int numsSize)
{
    int sleft=0;//左和
    int sum=0;//总和
    int i,j=0;
    for(i=0;i<numsSize;i++)
    {
        sum+=nums[i];
    }
    for(i=0;i<numsSize;i++)
    {
        if(sum-nums[i]-sleft==sleft)//总和-左和=左和,则成立
        {
            return i;
        }
        sleft+=nums[i];
    }
    return-1;

}

747.至少是其他数字两倍的最大数

在这里插入图片描述

int dominantIndex(int* nums, int numsSize)
{
    if (numsSize == 1)//只有一个元素时,无法比较
    {
        return 0;
    }
    int max = 0;//最大值
    int scemax = 0;//次大值
    int maxindex = 0;//最大值的下标
    int i = 0;
    for (i = 0;i < numsSize;i++)
    {
        if (nums[i] > max)
        {
            scemax = max;
            maxindex = i;
            max = nums[i];//赋值
        }
        else if (nums[i] > scemax)
        {
            scemax = nums[i];
        }
    }
    if (max < 2 * scemax)//只要满足最大值>=2*次大值,即成立
    {
        return -1;
    }
    return maxindex;

}

485.最大连续1的个数

在这里插入图片描述

int findMaxConsecutiveOnes(int* nums, int numsSize)
{
    int i;
    int count=0;
    for(i=0;i<numsSize;i++)
    {
        if(nums[i]==1)
        {
            count++;
        }
        else
        {
            nums[i]=count;//将连续的count赋值到数组nums中
            count=0;//再将count置为0,重新开始
        }
    }
    for(i=0;i<numsSize;i++)
    {
        if(nums[i]>count)//遍历完开始判断
        {
            count=nums[i];
        }
    }
    return count;

}

58.最后一个单词的长度

逆序查找
在这里插入图片描述

int lengthOfLastWord(char * s)
{
    int len=strlen(s);
    int a=0;
    for(int i=len-1;i>=0;i--)//逆序遍历
    {
        if(s[i]==' ')
        {
            if(a==0)
            {
                continue;
            }
            else
            {
                break;
            }
        }
        a++;//当if(s[i]==' ')不成立的时候,a++!!!
    }
    return a;

}

🌸 完结!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值