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~