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;
}
🌸 完结!