day1 leetcode(2,4,5)

善始善终
在这里插入图片描述

  • 两数相加
  • 寻找两个正序数组的中位数
  • 最长回文子串

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(l1
nullptr&&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。
总的来说,革命尚未成功,同志任需努力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值