力扣第299场周赛补题

第一题

链接:2319. 判断矩阵是否是一个 X 矩阵 - 力扣(LeetCode)​​​​​​

思路:直接遍历整个数组,查看每个位置是否符合题目条件

class Solution {
public:
    bool checkXMatrix(vector<vector<int>>& grid) {
        int res=0;
        for(int i=0;i<grid.size();i++)
        {
            for(int j=0;j<grid[i].size();j++)
            {
                if((i==j)||(i+j==grid.size()-1))
                {
                    if(grid[i][j]==0) res++;
                }else{
                    if(grid[i][j]!=0) res++;
                }
            }
        }
        if(res==0) return true;
        else       return false;
    }
};

第二题

链接:2320. 统计放置房子的方式数 - 力扣(LeetCode)

思路:先把一边的房子可能放置的方案m列出来,总方案数则为m*m。由题意可知可能放置的房子方案数量满足dp[i]=dp[i-1]+dp[i-2]的关系

class Solution {
public:
    int countHousePlacements(int n) {
       if(n==1) 
        {
            return 4;
        }
        if(n==2)
        {
            return 9;
        }           //把没有i-1和i-2的情况单独列出来
        long a=1,b=2,c=3;
        for(int i=3; i<=n;i++) {
            a=b;
            b=c;
            c=(a+b) % 1000000007;
        }           //计算一边房子的可能数量
                    //满足dp[i]=dp[i-2]+dp[i-1]的关系
        return (int)(c*c% 1000000007); //结果为两边的数量相乘
    }
};

第三题

链接:2321. 拼接数组的最大分数 - 力扣(LeetCode)

思路:计算出最大的交换后数组差,题目所求的结果为原数组和加上最大的交换后数组差

class Solution {
    int solve(vector<int>&nums1,vector<int>&nums2) {
        int s=0,maxdiff=0;
        for (int i=0,diff=0;i<nums1.size();i++) {
            s+=nums1[i];                  //选择第一个数组进行求和
            diff=max(diff+nums2[i]-nums1[i],0);  
        //不断得到数组差->
        //这里存在两种清况:1.当交换过来的差值在总情况下会使数组增大,保留
        //                2.当交换过来的差值在总情况下使数组减小,在后面建立新的left重新开始计算
            maxdiff=max(maxSum,diff); //不断比较交换后数组差,保留其中最大的            
        }
        return s+maxdiff;                  //返回数组和加上最大的交换后数组差
    }
//交换后的数组和=原数组和+交换后数组差
public:
    int maximumsSplicedArray(vector<int> &nums1, vector<int> &nums2) {
        return max(solve(nums1,nums2),solve(nums2,nums1)); //比较交换后的num1和num2保留最大值
    }
};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
力扣第二题是一道链表相关的题目,要求实现一个函数来将两个非负整数链表相加,并返回一个新的链表表示它们的和。 在解决这个问题时,可以设立一个表示进位的变量carried,并建立一个新的链表来存储结果。然后,使用while循环来同时处理两个输入链表,每次取出对应的节点值相加,并将结果加上进位值carried后的值作为一个新节点加入新链表的后面。当遍历完两个链表后,如果最后还有进位,需要再添加一个节点来存储进位的值。最后返回新链表的头节点即可。 下面是使用Java语言编写的实现代码: ```java public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(0); int sum = 0; ListNode cur = dummy; ListNode p1 = l1, p2 = l2; while (p1 != null || p2 != null) { if (p1 != null) { sum += p1.val; p1 = p1.next; } if (p2 != null) { sum += p2.val; p2 = p2.next; } cur.next = new ListNode(sum % 10); sum /= 10; cur = cur.next; } if (sum == 1) { cur.next = new ListNode(1); } return dummy.next; } } ``` 以上就是力扣两数相加第二题的Java实现代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【Java版】LeetCode 力扣第 2 题:两数相加 (Add Two Numbers)](https://blog.csdn.net/monokai/article/details/108132843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值