网上找了视频,LeetCode 30 天挑战,用c语言写,记录一下,一共30个leetcode 算法题 对应30天,大概需要写10篇,每篇3道题,手打下代码,外加记录一下。
题目如下》 找到数组里面的唯一出现一次的数
// 只要知道了 位运算的 异或 就很简单, 异或是指两个位相同为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,一个数的每位平方相加得到另一个数,继续平方相加,如此循环,如果最后得到1就是happy number。
//实际动手写确实不一样,包括两部分,第一部分是求平方和,第二部分是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;
}
//平方和的代码也可以优化一下
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 核心 代替存储
//乌龟兔子代码
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;
}
找到数组中最大的和
//两层嵌套也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 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有