【力扣周赛】第394场周赛

2024-04-28 23:12
文章标签 力扣 周赛 394

本文主要是介绍【力扣周赛】第394场周赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 1.统计特殊字母的数量
      • 2.使矩阵满足条件的最少操作次数

1.统计特殊字母的数量

题目链接
在这里插入图片描述

  • 🍎该题涉及的小技巧:🐥
    🐧①大写字母和对应的小写字母低5位都是相等的;
    🐧②大写字母ASCII二进制第 6 位是0,对应的小写字母第 6 位是1;
    在这里插入图片描述

🐧③位运算小技巧:🐥
在这里插入图片描述

  • 解题思路:
    🐧①将 word 中的字母都取出来各自放入一个大写🔠字母的集合,和一个小写🔡字母的集合;

    🐧②再对两个集合求交集就可以求出同时出现大小写字母的个数;

    🐧③用到的位运算小技巧:
    (ch >> 5) & 1,表示取出该字母的ASCII第6位,如果是 0 表示大写字母,1 表示小写字母;

    1<<(ch&31);,可以将该字母转换成为得到一个唯一的 8个字节32个 比特位数中的一位数字 1,其他的31位都是 0,这样 26个字母每个字母对应的映射都不一样;(例如: 假如 ch 字符是小写字母 c的话,此时1<<(ch&31) )的结果为十进制 8(0000 0000 0000 1000),所以这样看每个字母都有自己对应不同的二进制表示

    🐧④mask[0] & mask[1]表示求交集;

    🐧⑤集合的大小:__builtin_popcount(s)
  • 代码实现
class Solution {
public:int numberOfSpecialChars(string word) {int mask[2] = {0};// 注意:大写字母的ASCII二进制第 6 位是 0,小写字母第 6 位是 1for(auto ch : word){mask[(ch >> 5) & 1] |= 1<<(ch&31);}// 求集合的大小:__builtin_popcount(s)return __builtin_popcount(mask[0] & mask[1]);}
};

2.使矩阵满足条件的最少操作次数

题目链接

在这里插入图片描述

  • 解题思路:
    🐧①逆向思维:求最少操作的次数,那我们可以反过来取求最多保留多少个数字🔢;🎈

    🐧②我们从后往前来求每一列最多保留多少个数字🔢;

    🐧③必须记录前一列填的数字(要保证相邻列数字不同

    🐧④注意❗:必须用一个数组记录每一列用某一个数字的时候的结果,并且及时更新;
  • 解题代码
class Solution {int n, m;
int cnt[1010][15] = {0};
int vis[1010][15] = {0};
int ans = 0;public:int minimumOperations(vector<vector<int>>& grid) {n = grid.size(), m = grid[0].size();memset(vis, -1, sizeof(vis));for (int i = 0; i < m; i ++){for (int j = 0; j < n; j ++){int x = grid[j][i];cnt[i][x] ++;   // 第 i 列中,0 ~ 9 的个数}}//从最后一列开始往前搜索int res = dfs(m - 1, 10);// 注意:我们用了逆向思维,求的是最多保留数据的个数return n * m - res;}// 表示搜索第 i 列中,最多保留的个数,前一列为 jint dfs(int i, int j){// 递归出口if (i < 0)return 0;auto& ans = vis[i][j]; // 注意这里是引用if (ans != -1)return ans;ans = 0;for (int k = 0; k <= 9; k ++){if (k != j){ans = max(ans, dfs(i - 1, k) + cnt[i][k]);}}return ans;}
};

这篇关于【力扣周赛】第394场周赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/944512

相关文章

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目: 分析 我们首先使用哈希表来统计数字出现的频率,然后我们使用一个桶排序。我们首先定义一个长度为n+1的数组,对于下图这个示例就是长度为7的数组。为什么需要一个长度为n+1的数组呢?假如说总共有三个数字都为1,那么我们需要把这个1放在数组下标为3的位置,假如说数组长度为n,对于这个例子就是长度为3,那么它的

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结,删除链表节点问题使用到列表,哈希表,递归比较容易超时,我觉得使用计数排序比较稳,处理起来也不是很难。 1. 力扣3217:从链表中移除在数组中的节点 1.1 题目: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后,返回修改后的链表的头节点。 示例 1: 输入: nums = [1,2,3], head = [1,2,3,

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

力扣接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height

每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积

乍一看这个题很简单,但是不能用除法,并且在O(N)时间复杂度完成或许有点难度。 考虑到不能用除法,如果我们要计算输出结果位置i的值,我们就要获取这个位置左边的乘积和右边的乘积,那么我新设立两个数组L和R。 对于L来说,由于表达的是位置i左边的数的乘积,那么L[0]=1,因为第一个数字左边没数那么为了不影响乘积初始值就设置为1,那么L[1]=L[0]*nums[0],那么L[i]=L[i-1

LeetCode --- 413周赛

题目列表 3274. 检查棋盘方格颜色是否相同 3275. 第 K 近障碍物查询 3276. 选择矩阵中单元格的最大得分 3277. 查询子数组最大异或值 一、检查棋盘方格颜色是否相同 题目给定两个字符串来表示两个方格的坐标,让我们判断这两个方格的颜色是否相同,这里我们要观察棋盘的颜色特征,我们就会发现奇数行的奇数列和偶数行的偶数列是黑色,其他都是白色,所以我们可以直接计算出每个方

力扣 797. 所有可能路径【DFS】

1. 题目 2. 代码 DFS , 直接见代码 class Solution {public:vector<int> path;vector<vector<int>> res; // 结果集void dfs(vector<vector<int>>& graph, int cur, int n){// 找出所有从节点 0 到节点 n-1 的路径// 下标从 0 开始的if (

【Hot100】LeetCode—394. 字符串解码

目录 1- 思路栈实现+四种情况处理 2- 实现⭐394. 字符串解码——题解思路 3- ACM 实现 原题链接:394. 字符串解码 1- 思路 栈实现+四种情况处理 ① 遇到数字,进行倍数相加 、②遇到左括号,压栈之前的元素、③遇到右括号弹出,栈进行拼接、④否则遇到字母,直接拼接在 res通过栈,实现先进后出的思想 对于输入 3[a2[c]] 的输入,在读到 3[得