力扣 算法题

1. 两数之和

在这里插入图片描述

int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{
    for (int i = 0;i < numsSize;i++)
    {
        for (int j = i + 1;j < numsSize;j++)
        {
            if (nums[i] + nums[j] == target)//满足条件则将下标赋值给nums
            {
                nums[0] = i;
                nums[1] = j;
                *returnSize = 2;//改变数组长度,用指针才能改变函数之外的变量
                return nums;
            }
        }
    }
    return 0;//不符合条件,返回0

}

14. 最长公共前缀

在这里插入图片描述

思路:

拿第一个字符串当模板,然后从它第一个字符串开始跟后边所有的字符串的第一个字符串匹配,
直到匹配到不符合的,那么结束遍历。

那么将第一个字符串的当前位置赋值“0',表示字符串结束。这样返回第一个字符串的话就可以将结束标志之前的字
符串读出作为最长公共前缀。
char* longestCommonPrefix(char** strs, int strsSize)
{
    if (strsSize == 0)
    {
        return "";
    }
    for (int i = 0;i < strlen(strs[0]);i++)//以第一个字符串为模板,然后开始匹配
    {
        for (int j = 0;j < strsSize;j++)
        {
            if (strs[0][i] != strs[j][i])
            {
                strs[0][i] = '\0';
                return strs[0];
            }
        }
    }
    return strs[0];

}

69. x的平方根

在这里插入图片描述

思路:

意思就是比如 5 的开方,2平方小,3平方大了,我们希望要的结果是 2 ,那么就是总要在左半部分更新答案,当 i > j
的时候跳出循环,就是正确答案了。
22 < 5 < 33

代码:

int mySqrt(int x)
{
    if (x < 2)
    {
        return x;
    }
    int i = 1;
    int j = x / 2;
    int ans = 0;
    while (i <= j) //二分查找
    {
        int mid = i + (j - i) / 2; //防止值太大,越界
        if (mid <= x / mid) //由于是1平方,所以必然存在 mid*mid<x
        {
            ans = mid;
            i = mid + 1;
        }
        else
        {
            j = mid - 1;
        }
    }
    return ans;

}

190. 颠倒二进制

在这里插入图片描述

思路:

在这里插入图片描述

代码:

uint32_t reverseBits(uint32_t n)
{
    uint32_t ret = 0;
    int i;
    int t;
    for (i = 0;i < 32;i++)
    {
        ret = ret << 1; //腾出1位空间
        t = (n & 1); //取n 的最后一位
        ret = ret | t; //把t 放入ret
        n = n >> 1; //n 可以丢弃最后一位了
    }
    return ret; //返回ret
}

👊👊👊
⭐️ 这次的算法题有难度,多敲代码,理解呐!!!
🏃🏃😜 刷题ing~

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值