首页 > 其他分享 >【LeetCode】力扣刷题记录第五天

【LeetCode】力扣刷题记录第五天

时间:2024-07-03 21:00:31浏览次数:3  
标签:arr XOR 前缀 后缀 元素 力扣 数组 LeetCode 刷题

第五天!

第一题:LeetCode1720

 

首先,我们先来读懂题目什么意思:

encoded[i]=arr[i] XOR arr[i+1]
输入:encoded = [1,2,3], first = 1
输出:[1,0,2,1]

解释:若 arr = [1,0,2,1] ,那么 first = 1 且 encoded = [1 XOR 0, 0 XOR 2, 2 XOR 1] = [1,2,3]

encode[i-1]=arr[i-1] XOR arr[i]
encode[i-1] XOR arr[i-1]=arr[i-1] XOR arr[i] XOR arr[i-1]
encode[i-1] XOR arr[i-1]=arr[i-1] XOR arr[i-1] XOR arr[i]
encode[i-1] XOR arr[i-1]=0 XOR arr[i]

encode[i-1] XOR arr[i-1]=arr[i]
 因为arr[0]已经给出,所以从arr[i]开始。。

 解题思路:

首先,创建一个长度为 n+1 的数组 arr,用于存储解码后的原数组。这是因为编码后的数组长度为 n,而我们需要还原出原始数组,所以需要额外的一个位置来存储第一个元素。将给定的第一个元素 first 赋值给 arr[0]。这个元素是已知的,不需要进行解码。遍历编码后的数组 encoded,从第二个元素开始(即索引为 1 的元素)。对于每个元素,使用异或运算还原原数组的元素。具体来说,将当前元素与前一个元素进行异或运算,得到的结果就是原数组中对应的元素。将还原出的原数组返回。

class Solution {
public:
    vector<int> decode(vector<int>& encoded, int first) {
            vector<int>arr(encoded.size()+1);//创建一个长度为n的数组,用于存储解码后的原数组
            arr[0]=first;
            for(int i=0;i<encoded.size();i++)//遍历编码后的数组,从第二个元素开始
            {
                arr[i+1]=arr[i]^encoded[i];//使用异或运算还原数组的元素
            }
            return arr;
    }
};

第二题:LeetCode2574 

解题思路:

首先计算输入数组的前缀和和后缀和。前缀和表示从数组第一个元素到当前元素的累加和,后缀和表示从数组最后一个元素到当前元素的累加和。然后遍历数组,对于每个位置i,计算其前缀和与后缀和之差的绝对值,将结果存储在ans数组中最后返回ans数组作为结果。 

class Solution {
public:
    vector<int> leftRigthDifference(vector<int>& nums) {
        // 获取数组长度
        int n = nums.size();
        // 初始化结果数组,长度与输入数组相同
        vector<int> ans(n);
        // 初始化前缀和数组,长度与输入数组相同
        vector<int> ls(n);
        // 初始化后缀和数组,长度与输入数组相同
        vector<int> rs(n);

        // 预处理求出前缀和
        for (int i=0; i < n; i ++)
        {
            // 如果是第一个元素,前缀和就是它本身
            if (i==0) ls[i] = nums[i];
            // 否则,前缀和等于前一个元素的前缀和加上当前元素
            else ls[i] = ls[i-1] + nums[i];
        }

        // 预处理求出后缀和
        for (int i=n-1; i >= 0; i --)
        {
            // 如果是最后一个元素,后缀和就是它本身
            if (i == n-1) rs[i] = nums[i];
            // 否则,后缀和等于后一个元素的后缀和加上当前元素
            else rs[i] = rs[i+1] + nums[i];
        }

        // 构造ans数组:
        for (int i=0; i < n; i ++)
            // ans数组的每个元素等于对应位置的前缀和与后缀和之差的绝对值
            ans[i] = abs(ls[i] - rs[i]);
        return ans;
    }
};

 今天肝不动啦太困咯~想学点有意思滴!依旧是明天见嘻嘻!

标签:arr,XOR,前缀,后缀,元素,力扣,数组,LeetCode,刷题
From: https://blog.csdn.net/2301_77031350/article/details/140161573

相关文章

  • [LeetCode] 45. Jump Game II
    有点意思,需要动态规划。fromtypingimportListfromcollectionsimportCounterimporttimeclassSolution:defjump(self,nums:List[int])->int:max_reachable=0min_steps=0fori,elementinenumerate(nums):i......
  • 力扣:151.反转字符串里的单词【2023年7月3日学习记录】
     方法一:双指针1.先使用trim()方法删除单词字符串前后空格字符。2.用两个指针指向字符串末尾单词(一个快指针,一个慢指针),快指针先向前移动,直到移动到空格字符停下来,然后截取从快指针到慢指针的单词到新开辟的字符串中。3.快指针再向前移动一位,同时将慢指针指向到快指针的位......
  • Leetcode秋招冲刺(专题13--15)
    专题13:广度优先搜索题目559:N叉树的最大深度(YES)解题思路:使用广度优先搜索,广度优先搜索的核心就是使用队列queue存储每个根节点,然后再存储孩子节点。给定一个N叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N叉树输入按层序遍历序......
  • [LeetCode] 55. Jump Game
    写了一个符和直觉的递归,时间超限了。fromtypingimportListimporttimeclassSolution:defcanJump(self,nums:List[int])->bool:iflen(nums)==1:returnTruereturnself.isreach(nums,0)defisreach(self,nums:List[i......
  • 【Java完整版 面试必备】Leetcode Top100题目和答案-矩阵篇
    目录以下摘自leetcodeTop100精选题目-矩阵篇​矩阵置零螺旋矩阵旋转图像搜索二维矩阵II以下摘自leetcodeTop100精选题目-矩阵篇矩阵置零给定一个 mxn 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。示例:输入:matrix......
  • 力扣刷题之旅——21. 合并两个有序链表
    I理解题目需求II设计程序(参考:Violent-Ayang)III程序解析IV 程序相关知识点1.结构体(struct):2.指针(*):3.循环(while)和条件语句(if和else):I理解题目需求1.合并两个已经是升序排列的链表2.将它们合并为一个新的、也是升序排列的链表。3.合并后的链表需要包含两个输入......
  • 力扣每日一题 7/2 数学、数论、数组/双指针
    博客主页:誓则盟约系列专栏:IT竞赛专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • 【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、
    原题链接题目描述给你一个整数数组nums。返回两个(不一定不同的)质数在nums中下标的最大距离。示例1:输入:nums=[4,2,9,5,3]输出:3解释:nums[1]、nums[3]和nums[4]是质数。因此答案是|4-1|=3。示例2:输入:nums=[4,8,2,8]输出:0解释:nums[2]是质......
  • LeetCode 算法:二叉树展开为链表 c++
    原题链接......
  • (nice!!!)LeetCode 3164. 优质数对的总数 II(数组、哈希表)
    3164.优质数对的总数II思路:先找出可以被k整除的nums[i].方法一:统计因子。1、找出数组nums1每个元素的因子,用哈希表来记录每个因子出现的次数。然后再遍历数组nums2进行累加即可。classSolution{public:constintN=1e6+10;longlongnumberOfPairs(vec......