前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C 语言的 LeetCode 30 天挑战 第1部分,共10部分

C 语言的 LeetCode 30 天挑战 第1部分,共10部分

原创
作者头像
笃信好学
发布2023-04-09 16:31:35
3620
发布2023-04-09 16:31:35
举报
文章被收录于专栏:笃信好学笃信好学

网上找了视频,LeetCode 30 天挑战,用c语言写,记录一下,一共30个leetcode 算法题 对应30天,大概需要写10篇,每篇3道题,手打下代码,外加记录一下。

第一天 single number

题目如下》 找到数组里面的唯一出现一次的数

single number 题目
single number 题目
代码语言:javascript
复制
// 只要知道了 位运算的 异或 就很简单, 异或是指两个位相同为0,相异为1。 两个相同数进行异或就是0.
int singleNumber(int* nums, int numsSize){
    int result=0;
    for(int i=0;i<numsSize;i++)
    {
        result ^= nums[i];
    }
    return result;
}
位运算
位运算

该up主 提到在线执行代码的网站 Replit。

第二天 Happy Number

判断是不是happy number,一个数的每位平方相加得到另一个数,继续平方相加,如此循环,如果最后得到1就是happy number。

代码语言:javascript
复制
//实际动手写确实不一样,包括两部分,第一部分是求平方和,第二部分是while判断,把已经算过的数存入数组,
//完成空间换取时间
int sum_of_squares(int val)
{
    int q,r,result=0;
    do
    {
        q=val/10;
        r=val%10;
        result+=r*r;
        val=q;
    }
    while(q>=10);
    result+=q*q;   
    return result;
}
bool isHappy(int n){     
    bool exist[810]={false};
    int result=n;
    while(result!=1)
    {
        result=sum_of_squares(result);
        if(exist[result]==true ){
            return false;
        }
        else{
            exist[result]=true;
        }       
    }
    return true;
}
上面代码的performance
上面代码的performance
代码语言:javascript
复制
//平方和的代码也可以优化一下
int sum_of_squares(int val)
{
    int q,r,result=0;
    do
    {
        q=val/10;
        r=val%10;
        result+=r*r;
        val=q;
    }
    while(q>0);
    return result;
}

另一种解法 Floyd‘scycle-findingalgorithm 核心 代替存储

乌龟和兔子,乌龟走1格,兔子走2格,迟早会相遇
乌龟和兔子,乌龟走1格,兔子走2格,迟早会相遇
代码语言:javascript
复制
//乌龟兔子代码
int sum_of_squares(int val)
{
    int q,r,result=0;
    do
    {
        q=val/10;
        r=val%10;
        result+=r*r;
        val=q;
    }
    while(q>0);
    return result;
}
bool isHappy(int n){        
    int turtle=n;
    int rabbit=n;
    while(rabbit!=1)
    {       
        turtle=sum_of_squares(turtle);
        rabbit=sum_of_squares(rabbit);
        rabbit=sum_of_squares(rabbit);
        if(turtle==rabbit && rabbit!=1) return false;
    }
    return true;
}
上面代码表现
上面代码表现
up主的写法更简洁
up主的写法更简洁
补充 int i, j = 1; i 被定义了吗?
补充 int i, j = 1; i 被定义了吗?

第三题 Maximum Subarray

找到数组中最大的和

代码语言:javascript
复制
//两层嵌套也Time Limit Exceeded??
int maxSubArray(int* nums, int numsSize){
int max=nums[0];
for(int i=0;i<numsSize;i++)
{
    int sum=0;
    for(int j=i;j<numsSize;j++)
    {
        sum+=nums[j];
        if(max<sum){
            max=sum;
        }  
    }
}
return max;
}

另外一个写法是动态规划,以后再学。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一天 single number
  • 第二天 Happy Number
  • 第三题 Maximum Subarray
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档