力扣刷题ing

1.求出出现两次数字的 XOR 值

太久没刷题了,今天随机的一道题,一个模拟题,慢慢找感觉吧。

c++ 复制代码
class Solution {
public:
    int duplicateNumbersXOR(vector<int>& nums) {
        int len = nums.size();

        map<int, int> mp;
        int flag = 0;
        int ans = 0;
        for (int i = 1; i <= 50; i ++) mp[i] = 0;
        for (int i = 0; i < len; i ++)
        {
            mp[nums[i]] ++;
            if (mp[nums[i]] > 1)
            {
                ans = ans ^ nums[i];
            }
        }

        if (ans)   return ans;
        else    return 0;
    }
};

官方的题解是这样的:因为数据最多就只有50位,那么我们直接用一个50位的二进制来表示就可以了(我是这样理解的),首先,这50位二进制都是0,当x第一次出现是,那么我们就第x位就设置为1,表示出现过,那么在第二次出现的时候,我们通过位运算,将第x位和1进行&运算,判断第x位是否出现过,出现过我们就进行异或,反之就对对应的位置进行设1操作。

c++ 复制代码
long long mask = 0, ans = 0;
for (int t : nums)
{
	if (mask >> t & 1) ans ^= t;
	else mask |= (long long) 1 << t;
}

2. 1884. 鸡蛋掉落-两枚鸡蛋

评论区有朋友说这是个规律题,看样例2就能看出来,但是我感觉太抽象了,根本看不出来。拿到这个题的第一眼,觉得这个题应该是的dp,但是不知道怎么d。首先这里有两个鸡蛋,如果只有1个鸡蛋的话,在n层中,毫无疑问需要n次,但是现在有两个鸡蛋,那么在使用第2个鸡蛋的前提是第一个鸡蛋碎了,那么我们假设dp[k][n]表示有k个鸡蛋,有n层需要的最小操作次数,那么假设将 e 1 e_1 e1扔至第m层,那么这个是有会有两种情况:

  1. 如果 e 1 e_1 e1碎了,那么这个时候我们要用 e 2 e_2 e2了,那么此时 e 2 e_2 e2只会在 m − 1 m-1 m−1之间丢了,所以此时的 d p [ 2 ] [ n ] = m i n ( d p [ 2 ] [ n ] , d p [ 1 ] [ m − 1 ] + 1 ) dp[2][n]=min(dp[2][n],dp[1][m-1]+1) dp[2][n]=min(dp[2][n],dp[1][m−1]+1)
  2. 如果 e 1 e_1 e1没有碎,那么此时还是有两个蛋,并且我们一定知道 f f f是在 m + 1 − n m+1 - n m+1−n之间的,那么此时其实就是将之前的 1 − n 1-n 1−n转换成了 m + 1 − n m+1-n m+1−n,方法都是一样的了,这个时候 d p [ 2 ] [ n ] = m i n ( d p [ 2 ] [ n ] , d p [ 2 ] [ n − 1 ] + 1 ) dp[2][n]=min(dp[2][n],dp[2][n-1]+1) dp[2][n]=min(dp[2][n],dp[2][n−1]+1)。
c++ 复制代码
class Solution {
public:
    int dp[2][1010];
    int twoEggDrop(int n) {
        
        memset(dp, 0x3f3f3f3f, sizeof(dp));
        // 初始化,当只有一个鸡蛋的时候,无论是多少层,都需要丢n次。
        for (int i = 0; i <= n; i ++) dp[0][i] = i;
        dp[0][0] = dp[1][0] = 0;

        for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= i; j ++)
            dp[1][i] = min(dp[1][i], max(dp[0][j - 1] + 1, dp[1][i - j] + 1));
        // 当我们选定第j层进行实验的时候,无论e_1是否碎了,都需要1次。
        
        return dp[1][n];
    }
};
相关推荐
wljun73937 分钟前
六、OrcaSlicer 切片之区域
算法·切片软件 orcaslicer
2401_8414956442 分钟前
【LeetCode刷题】跳跃游戏Ⅱ
数据结构·python·算法·leetcode·数组·贪心策略·跳跃游戏
leaves falling43 分钟前
动态规划讲解
算法·动态规划
钓鱼的肝1 小时前
GESP系列(3级)小杨的储蓄
开发语言·数据结构·c++·笔记·算法·gesp
MicroTech20251 小时前
MLGO微算法科技推出人工智能与量子计算融合新成果:基于QLSS与LCHS的量子DPM算法技术
人工智能·科技·算法
AndrewHZ1 小时前
【图像处理基石】[特殊字符]圣诞特辑:10+经典图像处理算法,让你的图片充满节日氛围感!
图像处理·人工智能·opencv·算法·计算机视觉·stable diffusion·节日氛围感
艾醒1 小时前
大模型原理剖析——矩阵吸收优化:LLM推理加速的核心原理与实践
算法
艾醒1 小时前
大模型原理剖析——多头并行 + 潜变量协同:原理、应用与部署优化
算法
KingRumn1 小时前
Linux信号之信号安全
linux·算法
智驱力人工智能2 小时前
从合规到习惯 海上作业未穿救生衣AI识别系统的工程实践与体系价值 未穿救生衣检测 AI救生衣状态识别 边缘计算救生衣监测设备
人工智能·深度学习·opencv·算法·目标检测·边缘计算