力扣第343场周赛

news2024/7/6 17:40:49

第一次力扣,等大二寒暑假,有时间再来系统刷题

目录

🌼前言

🌼一,6341.保龄球游戏的获胜者

🌼二,6342.找出叠涂元素

🌳第一次 -- 超时

🌳第二次 -- AC


🌼前言

一共4题,1道easy,2道midium,1道hard,比赛时,不懂面向对象的return和vector越界的问题

浪费了很久,一个半小时,最后只AC了第1题

下面是1,2题的记录

🌼一,6341.保龄球游戏的获胜者

6341. 保龄球游戏的获胜者 - 力扣(LeetCode)

本题有个小坑,“第i轮价值”的描述中,“前2轮”意思是当前往前2轮,而不是初始2轮

导致大多数人,错了2次才做对

耗时17分钟

AC  代码

class Solution {
public:
    int isWinner(vector<int>& player1, vector<int>& player2) {
        int sum1 = 0, sum2 = 0, n = player1.size();
        for(int i = 0; i < n; ++i) {
            sum1 += player1[i];
            sum2 += player2[i];
            if(i == 1 && player1[0] == 10)
                sum1 += player1[i];
            if(i == 1 && player2[0] == 10)
                sum2 += player2[i];
            if(i >= 2 && (player1[i - 1] == 10 || player1[i - 2] == 10))
                sum1 += player1[i];
            if(i >= 2 && (player2[i - 1] == 10 || player2[i - 2] == 10))
                sum2 += player2[i];
        }
        if(sum1 > sum2) return 1;
        else if(sum1 == sum2) return 0;
        else return 2;
    }
};

🌼二,6342.找出叠涂元素

6342. 找出叠涂元素 - 力扣(LeetCode)

耗时一个半小时,半小时不了解vector和return,半小时暴力做法,最后还是TLE了

本题在return挣扎了很久

1,非void型函数,所有路径都要有return ...,确定的返回值

2,return 3;这样,它才会输出3,而不是cout<<3;

3,本题暴力O(m^2 * n^2) = 10^10,会TLE(time limit exceeded),需要用巧妙方法O(mn) 

🌳第一次 -- 超时

class Solution {
public:
    int row_color[100010], col_color[100010];
    int firstCompleteIndex(vector<int>& arr, vector<vector<int>>& mat) {
        
        int m = mat.size(), n = mat[0].size();
        //vector<int>row_color = {m, 0}; //标记该行已被涂色
        //vector<int>col_color = {n, 0}; //标记该列已被涂色
        
        //得到每 行/列 涂色数
        for(int i = 0; i < m * n; ++i) {
            int num = arr[i]; //当前数字
            for(int j = 0; j < m; ++j) {
                for(int k = 0; k < n; ++k) {
                    if(mat[j][k] == num) {
                        row_color[j] += 1; //记录第j行被涂色总数
                        col_color[k] += 1;
                    }
                }
            }
            
            //遍历行
            for(int j = 0; j < m; ++j) {
                if(row_color[j] == n) 
                    return i;
            }
            //遍历列
            for(int k = 0; k < n; ++k) {
                if(col_color[k] == m) 
                    return i;
            }
        }
    return m * n - 1;
    }
};

下面介绍下巧妙方法

在第一次代码的基础上(使用row_color[]和col_color[]数组保存某一行/列已经上色的数量)

增加R[], C[]数组,

R[mat[i][j]] = i; 表示元素mat[i][j]在第i行

R[mat[i][j]] = j; 表示元素mat[i][j]在第j列

比如R[7] = 2; 表示7这个数字在第3行(下标从0开始)

这样就可以统计,当前某行/列的上色数,判断是否满足条件,O(mn)解决问题

其实就是预处理,先准备好要用的

🌳第二次 -- AC

class Solution {
public:
    int firstCompleteIndex(vector<int>& arr, vector<vector<int>>& mat) {
        int m = mat.size(), n = mat[0].size();
        int R[m*n+1], C[m*n+1]; //单个元素最大达m*n
        //预处理
        for(int i = 0; i < m; ++i)
            for(int j = 0; j < n; ++j) {
                R[mat[i][j]] = i; //元素mat[i][j]在第i行
                C[mat[i][j]] = j; //元素mat[i][j]在第j列
            }
        
        int row_color[m + 1], col_color[n + 1]; //记录某一 行/列 上色的总数
        //初始化为0
        memset(row_color, 0, sizeof(row_color));
        memset(col_color, 0, sizeof(col_color));
        //复杂度O(m*n)
        for(int i = 0; i < m * n; ++i) {
            int r = R[arr[i]], c = C[arr[i]]; //arr[i]所属的 行/列
            row_color[r]++; //上色数+1
            col_color[c]++; //上色数+1
            if(row_color[r] == n || col_color[c] == m)
                return i;
        }
        return -1; //确保所有路径下都有返回值
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/477656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树相关的简单递归oj

二叉树相关的简单递归oj 前言题目二叉树的前序遍历相同的树判断单值二叉树对称二叉树另一棵树的子树创建二叉树并遍历 前言 这篇博客主要是博主感觉对二叉树oj题目不太熟悉&#xff0c;随便整理的一下题目和解答&#xff0c;方便复习&#xff0c;所以讲题部分主要以我自己以及为…

Java 基础入门篇(二)——— Java 基础语法

文章目录 一、注释二、字面量三、变量3.1 变量概述3.2 变量在计算机中的底层原理 四、数据类型五、关键字、标志符六、类型转换6.1 自动类型转换6.2 表达式的自动类型转换6.3 强制类型转换 七、运算符7.1 基本算数运算符7.2 符号做连接符7.3 自增自减运算符7.4 赋值运算符7.5 …

【C++技能树】类的六个成员函数Ⅰ --构造、析构、拷贝构造函数

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 本篇导航 0.this指针1.Class默认成员函数2.构造函数调用规则: 3.析构函数4.拷贝构造函数 0.this指针 在开始本章内容之前&#xff0c;先浅…

Channel-wise Knowledge Distillation for Dense Prediction(ICCV 2021)原理与代码解析

paper&#xff1a;Channel-wise Knowledge Distillation for Dense Prediction official implementation&#xff1a;https://github.com/irfanICMLL/TorchDistiller/tree/main/SemSeg-distill 摘要 之前大多数用于密集预测dense prediction任务的蒸馏方法在空间域spatial…

(求正数数组的最小不可组成和,养兔子)笔试强训

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 目录 文章目录 一、选择题1 二、[编程题]养兔子 三、[编程题]求正数数组的最小不可组成和 一、选择题1 reflection是如何工作的__牛客网 (nowcoder.com) 考虑下面这个简单的例子&…

大数据Doris(八):Broker部署和集群启停脚本

文章目录 Broker部署和集群启停脚本 一、Broker部署 1、准备Broker 安装包 2、启动 Broker

PyQt6剑指未来-日期和时间

前言 时间和日期是软件开发中非常重要的概念。在PyQt6中&#xff0c;时间和日期模块提供了处理日期、时间和日期时间的类和函数&#xff0c;以及管理时区和夏令时的特性。这些模块提供了可靠和易于使用的工具&#xff0c;使得在PyQt6中处理和呈现时间和日期的操作变得轻松起来…

Java中Lambda表达式(初学到精通)

目录 一、Lambda表达式是什么&#xff1f;什么场景下使用Lambda&#xff1f; 1.Lambda 表达式是什么 2.函数式接口是什么 第二章、怎么用Lambda 1.必须有一个函数式接口 2.省略规则 3.Lambda经常用来和匿名内部类比较 第三章、具体使用举例&#xff08;&#xff09; 1.案…

跳跃游戏类题目 总结篇

一.跳跃游戏类题目简单介绍 跳跃游戏是一种典型的算法题目&#xff0c;经常是给定一数组arr&#xff0c;从数组的某一位置i出发&#xff0c;根据一定的跳跃规则&#xff0c;比如从i位置能跳arr[i]步&#xff0c;或者小于arr[i]步&#xff0c;或者固定步数&#xff0c;直到到达某…

C++ 链表概述

背景 当需要存储大量数据并需要对其进行操作时&#xff0c;常常需要使用到链表这种数据结构。它可以用来存储一系列的元素并支持插入、删除、遍历等操作。 概念 一般来说&#xff0c;链表是由若干个节点组成的&#xff0c;每个节点包含了两个部分的内容&#xff1a;存储的数…

【嵌入式环境下linux内核及驱动学习笔记-(6-内核 I/O)-阻塞与非阻塞】

目录 1、阻塞与非阻塞1.1 以对recvfrom函数的调用及执行过程来说明阻塞的操作。1.2 以对recvfrom函数的不断轮询调用为例&#xff0c;说明非阻塞时进程的行为。1.3 简单介绍内核链表及等待队列1.4 等待队列1.4.1 定义等待队列头部&#xff08;wait_queue_head_t&#xff09;1.4…

vue动态添加多组数据添加正则限制

如图新增多条数据&#xff0c;如果删除其中一条正则校验失败的数据&#xff0c;提示不会随之删除&#xff0c;若想提示删除并不清空数据 delete (item, index) {this.applicationForm.reserveInfo.forEach((v, i) > {if (i index) {this.$refs.formValidate.fields.forEac…

UFT——操作模块

示例一 创建一个可重复利用的登录测试更改Action的名称。使用本地数据表。创建一个主调用测试。建立测试迭代。处理缺失的Action。 分析&#xff1a;就是创建一个只有登录的测试起名为login&#xff0c;然后在创建一个主测试起名字比如main&#xff0c;在main中&#xff0c;调用…

微信小程序定义模板

微信小程序提供模板&#xff08;template&#xff09;功能&#xff0c;把一些可以共用的&#xff0c;复用的代码在模板中定义为代码片段&#xff0c;然后在不同的地方调用&#xff0c;可以实现一次编写&#xff0c;多次引用的效果。 首先我们看一下官网是如何操作的 一般的情…

笔记:对多维torch进行任意维度的多“行”操作

如何取出多维torch指定维度的指定“行” 从二维torch开始新建torch取出某一行取出某一列一次性取出多行取出连续的多行取出不连续的多行 一次取出多列取出连续的多列取出不连续的多列 考虑三维torch取出三维torch的任意两行&#xff08;means 在dim0上操作&#xff09;取出连续…

( 字符串) 9. 回文数 ——【Leetcode每日一题】

❓9. 回文数 难度&#xff1a;简单 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如…

Git的安装与使用+Git在IDEA中的使用

文章目录 一、Git概述1、版本控制器的方式2、Git的工作流程图 二、Git的安装与常用命令1、Git环境安装2、Git环境基本配置3、获取本地仓库4、基础操作指令 三、分支1、常用指令2、解决合并冲突 四、Git远程仓库1、创建远程仓库2、远程操作仓库3、冲突处理 四、IDEA中使用Git1、…

数据结构——二叉树

二叉树 1 二叉树的种类 1.1 满二叉树 节点数量为 2^k - 1 (k是树的深度&#xff0c;底层的叶子节点都是满的&#xff09; 1.2 完全二叉树 完全二叉树是指除了下面一层外&#xff0c;其余层的节点都是满的&#xff1b; 且最下面一层的叶子节点是从左到右连续的。 下面这个…

pci总线协议学习笔记——PCI总线基本概念

1、pci总线概述 (1)PCI&#xff0c;外设组件互连标准(Peripheral Component Interconnection)&#xff0c;是一种由英特尔&#xff08;Intel&#xff09;公司1991年推出的用于定义局部总线的标准; (2)最早提出的PCI总线工作在33MHz频率之下&#xff0c;传输带宽达到133MB/s(33M…