题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{
//两次循环找target
for (int i = 0; i < numsSize - 1; i++)
{
for (int j = i + 1; j < numsSize; j++)
{
if (nums[i] + nums[j] == target)
{
//找到就开辟一个空间,存放i和j进去,最后返回去
int* arr = (int*)malloc(sizeof(int) * 2);
*returnSize = 2;
arr[0] = i;
arr[1] = j;
return arr;
}
}
}
//找不到
return 0;
}
题目:给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度
代码和注释:
int lengthOfLongestSubstring(char* s) {
int len = strlen(s);
//定义left和right从0开始遍历
int left = 0;
int right = 0;
//max记录最长字串的长度
int max = 0;
//j用来遍历left到right之间有没有重复字符
int j = 0;
//遍历字符串
for (int i = 0; i < len; i++)
{
//SameChar用来记录是否出现相同的字符,每次循环进来都要把它置0;
//因为上一次循环中有可能把它赋成1
int SameChar = 0;
//left和right相当于维护一段子字符串的长度
//每次right++完后,将left赋给j,即每次都从left开始遍历到right
//若遇到重复的字符,将j的下一个位置赋给新的left,right再++,这样又开始遍历一段新的子字符串
for (j = left; j < right; j++)
{
if (s[j] == s[right])
{
//遇到相同的字符
SameChar = 1;
break;
}
}
//遇到相同的字符
if (SameChar)
{
left = j + 1;
}
//判断最长字串的长度
if (max < right - left + 1)
{
max = right - left + 1;
}
right++;
}
return max;
}
题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 123 不是,-121也不是。
bool isPalindrome(int x)
{
if (x < 0)
{
return false;
}
int a = x;
long long b = 0;
//直接逆序整个数
while (a > 0)
{
b = b * 10 + a % 10;
a /= 10;
}
//如果逆序的数等于原来的x,就符合题意
if (b == x)
{
return true;
}
else
{
return false;
}
}