• LeetCode 热题 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个正序数组的中位数 5. 最长回文子串


    1. 两数之和 

    题目地址:力扣1

    思路:

     基础循环遍历,这个编译器有点问题,非要在下面也写一个return..

    代码:

    1. class Solution {
    2. public:
    3. vector<int> twoSum(vector<int>& nums, int target) {
    4. vector<int> v;
    5. for(int i=1;isize();i++)
    6. {
    7. for(int j=0;j
    8. {
    9. if(nums[i]+nums[j]==target)
    10. {
    11. v.push_back(i);
    12. v.push_back(j);
    13. return v;
    14. }
    15. }
    16. }
    17. return v;
    18. }
    19. };

    2. 两数相加 

    题目地址:力扣2

    思路:

    就是模拟加减运算,注意进位就好。

    以及每一个新的结点都要new一下。

    代码:

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode() : val(0), next(nullptr) {}
    7. * ListNode(int x) : val(x), next(nullptr) {}
    8. * ListNode(int x, ListNode *next) : val(x), next(next) {}
    9. * };
    10. */
    11. class Solution {
    12. public:
    13. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
    14. ListNode* l3;
    15. ListNode* t=new ListNode(0);
    16. l3=t;
    17. while(l1&&l2)
    18. {
    19. t->val=t->val+l1->val+l2->val;
    20. ListNode* p;
    21. if(t->val>=10)p=new ListNode(t->val/10);
    22. else p=new ListNode(0);
    23. t->val=t->val%10;
    24. l1=l1->next;
    25. l2=l2->next;
    26. if(l1||l2){
    27. t->next=p;
    28. t=t->next;
    29. }
    30. }
    31. ListNode* p;
    32. while(l1)
    33. {
    34. t->val=t->val+l1->val;
    35. if(t->val>=10)p=new ListNode(t->val/10);
    36. else p=new ListNode(0);
    37. t->val=t->val%10;
    38. if(l1->next){
    39. t->next=p;
    40. t=t->next;
    41. }
    42. l1=l1->next;
    43. }
    44. while(l2)
    45. {
    46. t->val=t->val+l2->val;
    47. if(t->val>=10)p=new ListNode(t->val/10);
    48. else p=new ListNode(0);
    49. t->val=t->val%10;
    50. if(l2->next){
    51. t->next=p;
    52. t=t->next;
    53. }
    54. l2=l2->next;
    55. }
    56. if(p->val!=0){
    57. t->next=p;
    58. }
    59. return l3;
    60. }
    61. };

    3. 无重复字符的最长子串

    题目地址:力扣3

    思路:

     改了好久。。小细节一直错。

    三层循环来做这题。

    以pwwkew为例,我们肉眼去看的思路是

    p

    pw

      w

        w

        wk

        wke

          k

          ke

          kew

    所以用代码模拟就好啦

    代码:

    1. class Solution {
    2. public:
    3. int lengthOfLongestSubstring(string s) {
    4. if(s=="")return 0;
    5. if(s.length()==1)return 1;
    6. int t=1;
    7. int sum=1;
    8. int g=0;
    9. for(int i=0;ilength();i++)
    10. {
    11. t=1;
    12. for(int j=i+1;jlength();j++)
    13. {
    14. for(int k=i;k
    15. {
    16. if(s[j]==s[k]){
    17. sum=max(sum,t);
    18. g=1;
    19. break;
    20. }
    21. }
    22. if(g==1){
    23. g=0;
    24. break;
    25. }
    26. t++;
    27. sum=max(sum,t);
    28. }
    29. }
    30. //sum=max(sum,t);
    31. return sum;
    32. }
    33. };

    4. 寻找两个正序数组的中位数 

    题目地址:力扣4

    思路:

    不理解为什么这题标记为困难,这就是最简单的把两个递增序列合并成一个递增序列。

    最后求一下中位数就好了。

    代码:

    1. class Solution {
    2. public:
    3. double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
    4. vector<int> nums3;
    5. int i=0;
    6. int j=0;
    7. while(isize()&&jsize()){
    8. if(nums1[i]
    9. nums3.push_back(nums1[i]);
    10. i++;
    11. }
    12. else{
    13. nums3.push_back(nums2[j]);
    14. j++;
    15. }
    16. }
    17. while(isize())
    18. {
    19. nums3.push_back(nums1[i]);
    20. i++;
    21. }
    22. while(jsize())
    23. {
    24. nums3.push_back(nums2[j]);
    25. j++;
    26. }
    27. int w;
    28. if((nums1.size()+nums2.size())%2==0){
    29. w=(nums1.size()+nums2.size())/2;
    30. return (nums3[w-1]+nums3[w])/2.0;
    31. }
    32. else{
    33. w=(nums1.size()+nums2.size())/2;
    34. return nums3[w];
    35. }
    36. }
    37. };

     5. 最长回文子串

     题目地址:力扣5

     思路:

    暴力过不去,所以用了动态规划

    dp[i][j]代表s[i][j]是否是回文数

    首先初始化dp数组,所有dp[i][i]都是1.

    当i~j长度为2以及2以内时,只要s[i]==s[j],则它就是回文数,所以dp[i][j]=1.

    当长度大于2的时候,我们要看里面的结构,dp[i+1][j-1]是否为1,如果为1说明它里面就是个回文数,比较两端是否相等即可。s[i]==s[j]则dp[i][j]=1。

    代码:

    1. class Solution {
    2. public:
    3. string longestPalindrome(string s) {
    4. if(s.size()==1)return s;
    5. string c=s.substr(0,1);
    6. int len=1;
    7. int st=0;
    8. int dp[1001][1001];
    9. memset(dp,0,sizeof(dp));
    10. for(int i=0;ilength();i++)
    11. {
    12. dp[i][i]=1;
    13. }
    14. for(int i=1;ilength();i++)
    15. {
    16. for(int j=0;j
    17. {
    18. if(s[i]==s[j])
    19. {
    20. if(i-j+1<=2)dp[j][i]=1;
    21. else{
    22. dp[j][i]=dp[j+1][i-1];
    23. }
    24. }
    25. if(dp[j][i]){
    26. if(i-j+1>len)
    27. {
    28. len=i-j+1;
    29. st=j;
    30. }
    31. }
    32. }
    33. }
    34. return s.substr(st,len);
    35. }
    36. };

  • 相关阅读:
    @DateTimeFormat 和 @JsonFormat 的详细研究
    Termius for Mac:掌控您的云端世界,安全高效的SSH客户端
    机器学习工作岗位
    Zookeeper技术精华带领深入详细了解
    MATLAB中strjoin函数使用
    CSS3零基础快速入门
    Web前端:所有新前端开发人员应该具备的顶级技能
    前端面试丨综合整理中高级前端最新面试题
    数据库-序列
    仙人指路,引而不发,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中New和Make函数的使用背景和区别EP16
  • 原文地址:https://blog.csdn.net/Zero_979/article/details/126852537