善始善终
- 两数相加
- 寻找两个正序数组的中位数
- 最长回文子串
1. 两数相加
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode head(0);
ListNode* tail=&head;
int sum=0;
while(l1!=nullptr||l2!=nullptr||sum>0)
{
if(l1!=nullptr&&l2!=nullptr)
sum+=l1->val+l2->val;
else if(l1!=nullptr&&l2nullptr)
sum+=l1->val;
else if(l1nullptr&&l2!=nullptr)
sum+=l2->val;
l1=l1!=nullptr?l1->next:nullptr;
l2=l2!=nullptr?l2->next:nullptr;
tail->next=new ListNode(sum%10);
sum=sum/10;
tail=tail->next;
}
return head.next;
}
};
本题的思路并不难,起初想用一个count来记录是否进位,但发现过于麻烦,所以选择将sum设置为全局变量,每次使用完之后除以10。初次之外在这题上花费时间较多的就是空指针的判别问题,起初没有想到只剩一个数的情况,这样是符合循环条件的,但这样存在一个已经是空了的指针,还要寻找它的数据域,所以我使用了多个if来判断每个指针的情况,避免空指针数据域加和的情况发生。
2. 寻找两个正序数组的中位数
class Solution {
public:
double findMedianSortedArrays(vector& nums1, vector& nums2) {
int m=nums1.size();
int n=nums2.size();
int nums3[m+n];
if (m == 0) {
if (n % 2 == 0) {
return (nums2[n / 2 - 1] + nums2[n / 2]) / 2.0;
} else {
return nums2[n / 2];
}
}
if (n == 0) {
if (m % 2 == 0) {
return (nums1[m / 2 - 1] + nums1[m / 2]) / 2.0;
} else {
return nums1[m / 2];
}
}
int count = 0;
int i = 0, j = 0;
while (count != (m + n)) {
if (i == m) {
while (j != n) {
nums3[count++] = nums2[j++];
}
break;
}
if (j == n) {
while (i != m) {
nums3[count++] = nums1[i++];
}
break;
}
if (nums1[i] < nums2[j]) {
nums3[count++] = nums1[i++];
} else {
nums3[count++] = nums2[j++];
}
}
if (count % 2 == 0) {
return (nums3[count / 2 - 1] + nums3[count / 2]) / 2.0;
} else {
return nums3[count / 2];
}
}
};
本题使用暴力解法
3. 最长回文子串
class Solution:
def longestPalindrome(self, s: str) -> str:
res = ‘’
for i in range(0, len(s)):
start = max(0 ,i - len(res) - 1)
print(start)
temp = s[start : i + 1]
if temp == temp[::-1]:
res = temp
else:
temp = temp[1:]
if temp == temp[::-1]:
res = temp
return res
回文要求的就是正反一样,且前后去掉相同个数的字符也是回文。基于这一特性,我想到了使用python中的切片。但在这一步之后就遇到了问题,通过查看解析才勉强写出。
今日收获
今天是刷题的第一题,坦白讲对我来说真的很有难度,但“no pain ,no gain”,今天真的学到了很多,再次意识到了指针的重要性,并且对空指针的错误处理有了更深刻的影响。
比较可惜的是寻找两个正序数组的中位数一题的算法思路不是很好,我想采用二分查找,分治思想会好很多。但迫于今天的时间有限,只能这样了。
初次之外又复习到了放弃多年的python。
总的来说,革命尚未成功,同志任需努力。