第一周题目总结

1.车尔尼有一个数组 nums ,它只包含  整数,所有正整数的数位长度都 相同 。

两个整数的 数位不同 指的是两个整数 相同 位置上不同数字的数目。

请车尔尼返回 nums 中 所有 整数对里,数位不同之和。

示例 1:

输入:nums = [13,23,12]

输出:4

解释:
计算过程如下:
13 和 23 的数位不同为 1 。
- 13 和 12 的数位不同为 1 。
23 和 12 的数位不同为 2 。
所以所有整数数对的数位不同之和为 1 + 1 + 2 = 4 

class Solution {
public:
    long long sumDigitDifferences(vector<int>& nums) {
        long long ans = 0; // 初始化答案为0
        // cnt 是一个二维数组,每个元素是一个大小为10的数组
        // cnt[i][d] 表示在第 i 位上数字为 d 的个数
        vector<array<int, 10>> cnt(to_string(nums[0]).length());

        // 遍历 nums 数组
        for (int k = 0; k < nums.size(); k++) {
            int x = nums[k]; // x 是当前处理的整数

            // 遍历 x 的每一位
            for (int i = 0; x; x /= 10, i++) {
                int d = x % 10; // 取出 x 的最低位数字 d

                // 更新答案 ans
                // k - cnt[i][d] 表示第 i 位上数字为 d 的个数与当前位置 k 的差值
                ans += k - cnt[i][d]++;
            }
        }
        return ans; // 返回最终的答案
    }
};

  1. 初始化变量和数据结构

    • ans 初始化为 0,用来存储最终的结果,即所有整数对的数位不同之和。
    • cnt 是一个二维数组,大小为 to_string(nums[0]).length(),即第一个整数的位数。每个 cnt[i] 是一个大小为 10 的数组,用来统计每个位置上数字出现的次数。
  2. 遍历整数数组 nums

    • 对于数组中的每个整数 nums[k],进行处理。
  3. 处理每个整数 x

    • 使用一个内部循环,不断取出 x 的最低位数字 d,直到 x 变为 0。
    • x % 10 得到 x 的最低位数字 d
    • x /= 10 将 x 右移一位,继续处理下一位数字。
  4. 更新答案 ans

    • 对于每个数字 d 在第 i 位上出现,更新 ans
      • k - cnt[i][d] 表示当前位置 k 减去第 i 位上数字为 d 的个数。
      • cnt[i][d]++ 更新 cnt[i][d],表示第 i 位上数字为 d 的个数增加了一个。
  5. 返回结果

    • 返回累计的 ans,即所有整数对的数位不同之和。

2.  如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 特殊数组 。

周洋哥有一个整数数组 nums 和一个二维整数矩阵 queries,对于 queries[i] = [fromi, toi],请你帮助周洋哥检查子数组 nums[fromi..toi] 是不是一个 特殊数组 

返回布尔数组 answer,如果 nums[fromi..toi] 是特殊数组,则 answer[i] 为 true ,否则,answer[i] 为 false 。

示例 1:

输入:nums = [3,4,1,2,6], queries = [[0,4]]

输出:[false]

解释:

子数组是 [3,4,1,2,6]。2 和 6 都是偶数。

class Solution {

public:

    vector<bool> isArraySpecial(vector<int>& nums, vector<vector<int>>& queries) {  

        int k=queries.size();  

              int q[100000] = {0};

            q[0]=1;

    for (int i = 1; i < nums.size(); ++i) {

        if ((nums[i] % 2) == (nums[i - 1] % 2))

            q[i] = q[i - 1] + 1;

        else

            q[i] = q[i - 1];

       

    }

   vector<bool> answer;

    for (int i = 0; i <k; i++) {

        if (q[queries[i][0]] == q[queries[i][1]]) {

                answer.push_back(true);

            }

            else

                answer.push_back(false);

    }

    return answer;

    }

};

给你两个整数 numBottles 和 numExchange 。

numBottles 代表你最初拥有的满水瓶数量。在一次操作中,你可以执行以下操作之一:

  • 喝掉任意数量的满水瓶,使它们变成空水瓶。
  • 用 numExchange 个空水瓶交换一个满水瓶。然后,将 numExchange 的值增加 1 。

注意,你不能使用相同的 numExchange 值交换多批空水瓶。例如,如果 numBottles == 3 并且 numExchange == 1 ,则不能用 3 个空水瓶交换成 3 个满水瓶。

返回你 最多 可以喝到多少瓶水。

示例 1:

输入:numBottles = 13, numExchange = 6
输出:15
解释:上表显示了满水瓶的数量、空水瓶的数量、numExchange 的值,以及累计喝掉的水瓶数量。

class Solution {

public:

    int maxBottlesDrunk(int numBottles, int numExchange) {

        // ans:答案

        // emp:目前有的空瓶数

        int ans = 0, emp = 0;

        while (true) {

            // 把所有水喝完

            ans += numBottles;

            emp += numBottles;

            numBottles = 0;

            if (emp >= numExchange) {

                // 空瓶足够,进行一次兑换

                emp -= numExchange;

                numBottles++;

                numExchange++;

            } else {

                // 空瓶不够了,无法获得更多瓶子,退出模拟

                break;

            }

        }

        return ans;

    }

};

由于每 numExchange 个空瓶才能换一瓶,且每次兑换 numExchange 都会加一,所以只要 numExchange 至少为 2,则每次兑换都会至少“损失”一个瓶子。一开始一共只有 numBottles 个瓶子,显然至多 numBottles 次兑换之后就没有瓶子了。

4

给你一个大小为 m x n 的二维矩阵 grid 。你需要判断每一个格子 grid[i][j] 是否满足:

  • 如果它下面的格子存在,那么它需要等于它下面的格子,也就是 grid[i][j] == grid[i + 1][j] 。
  • 如果它右边的格子存在,那么它需要不等于它右边的格子,也就是 grid[i][j] != grid[i][j + 1] 。

如果 所有 格子都满足以上条件,那么返回 true ,否则返回 false 。

示例 1:

输入:grid = [[1,0,2],[1,0,2]]

输出:true

解释:

class Solution {

public:

    bool satisfiesConditions(vector<vector<int>>& grid) {

        int m,n;

        m=grid.size();

        n=grid[0].size();

        for(int i=0;i<m-1;i++)

        {

            for(int j=0;j<=n-1;j++)

            {

              if(grid[i][j]!=grid[i+1][j])

              return false;

            }

        }

         

            for(int j=0;j<n-1;j++)

            {

             

                 if(grid[0][j]==grid[0][j+1])

                 {  

                   return false;

                 }

           

         

        }

         return true;

    }

   

};

对于每个格子 grid[i][j],它需要与它下面的格子 grid[i+1][j] 相等。这一部分代码通过两层循环实现:

for (int i = 0; i < m - 1; ++i)

{

for (int j = 0; j < n; ++j)

{

if (grid[i][j] != grid[i+1][j])

{

return false;

} } }

在第一层循环中,遍历每一行 i,第二层循环遍历该行的每一列 j。如果发现 grid[i][j] 不等于 grid[i+1][j],即当前格子与下面的格子不相等,直接返回 false

条件二检查: 对于每个格子 grid[i][j],它需要与其右边的格子 grid[i][j+1] 不相等。这部分代码如下:

for (int j = 0; j < n - 1; ++j)

{

if (grid[0][j] == grid[0][j+1])

{

return false; } }

这里只需遍历第一行 grid[0] 的每一列 j,检查相邻的两个格子 grid[0][j]grid[0][j+1] 是否相等。如果有任何一对相邻格子相等,即返回 false

返回结果: 如果两个条件都满足,即所有格子都满足要求,则返回 true

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

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

相关文章

【嵌入式DIY实例-ESP8266篇】-LCD ST7735显示网络时间

LCD ST7735显示网络时间 文章目录 LCD ST7735显示网络时间1、硬件准备2、代码实现本文将介绍如何使用 ESP8266 NodeMCU Wi-Fi 板实现互联网时钟,其中时间和日期显示在 ST7735 TFT 显示屏上。 ST7735 TFT是一款分辨率为128160像素的彩色显示屏,采用SPI协议与主控设备通信。 1…

SQL语句(DML)

DML英文全称是Data Manipulation Language&#xff08;数据操作语言&#xff09;&#xff0c;用来对数据库中表的数据记录进行增删改等操作 DML-添加数据 insert into employee(id, workno, name, gender, age, idcard) values (1,1,Itcast,男,10,123456789012345678);select *…

AI 与数据的智能融合丨大模型时代下的存储系统

WOT 全球技术创新大会2024北京站于 6 月 22 日圆满落幕。本届大会以“智启新纪&#xff0c;慧创万物”为主题&#xff0c;邀请到 60 位不同行业的专家&#xff0c;聚焦 AIGC、领导力、研发效能、架构演进、大数据等热门技术话题进行分享。 近年来&#xff0c;数据和人工智能已…

记录搭建一台可域名访问的HTTPS服务器

一、背景 近期公司业务涉及到微信小程序&#xff0c;即将开发完成需要按照微信小程序平台的要求提供带证书的域名请求服务器。 资源背景介绍如下&#xff1a; 1、域名 公司已有一个二级域名&#xff0c;再次申请新的二级域名并且实现ICP备案不仅需要花重金重新购买&#xff0c;…

Docker实现Redis主从,以及哨兵机制

Docker实现Redis主从,以及哨兵机制 目录 Docker实现Redis主从,以及哨兵机制准备Redis镜像创建Redis主节点配置文件启动Redis从节点确认主从连接哨兵主要功能配置哨兵文件创建Redis哨兵的Docker容器 要通过Docker实现Redis的主从&#xff08;master-slave&#xff09;复制&#…

汽车EDI: BMW EDI项目案例

宝马集团是全世界成功的汽车和摩托车制造商之一&#xff0c;旗下拥有BMW、MINI和Rolls-Royce三大品牌&#xff1b;同时提供汽车金融和高档出行服务。作为一家全球性公司&#xff0c;宝马集团在14个国家拥有31家生产和组装厂&#xff0c;销售网络遍及140多个国家和地区。 本文主…

什么是 Socks5 代理?了解和使用 SOCKS5 代理的终极指南

SOCKS5是什么以及它如何工作&#xff1f; 在网络和互联网协议领域&#xff0c;有多种工具和技术在确保安全高效的通信方面发挥着至关重要的作用。 SOCKS5 就是这样一个工具&#xff0c;它代表套接字安全版本 5。 在这篇博文中&#xff0c;我们将深入探讨 SOCKS5 的细节&…

CoAtNet(NeurIPS 2023, Google)论文解读

paper&#xff1a;CoAtNet: Marrying Convolution and Attention for All Data Sizes third-party implementation&#xff1a;https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/maxxvit.py 背景 自AlexNet以来&#xff0c;ConvNets一直是计算机…

【基于R语言群体遗传学】-5-扩展到两个以上等位基因及多基因位点

我们现在继续对于群体遗传学进行统计建模&#xff0c;书接上回&#xff0c;我们讨论了孤雌生殖的物种违反哈代温伯格遗传比例的例子&#xff0c;那我们现在来看多于两个等位基因的情况的计算。 如果没有看过之前文章的同学&#xff0c;可以先去看一下之前的文章&#xff1a; …

开源租房项目

项目名称项目地址描述体验地址后端代码前端代码小程序端代码gitHubstart租房或房屋交易项目https://github.com/saysky/manland?tabreadme-ov-filePC端 管理端http://manland.liuyanzhao.com/有有无房适–房屋租赁管理平台https://github.com/LiuXIn011/rightHouse开源房屋管理…

非对称加密算法原理与应用1——秘钥的生成

作者:私语茶馆 1.前言 非对称算法有非常多的用途,实现license管控,数字签名,加密内容等等,由于涉及场景和标准非常多,因此实际使用过程中还是存在一定门槛,这里记录一下利用非对称算法RSA的应用关键点,并提供实现license管理的案例。预计拆分为以下几个章节: (1)秘…

【分布式数据仓库Hive】HivQL的使用

目录 一、Hive的基本操作 1. 使用Hive创建数据库test 2. 检索数据库&#xff08;模糊查看&#xff09;&#xff0c;检索形如’te*’的数据库 3. 查看数据库test详情 4. 删除数据库test 5. 创建一个学生数据库Stus&#xff0c;在其中创建一个内部表Student&#xff0c;表格…

【kafka】可视化工具cmak(原kafka-manager)安装问题解决

众所周知&#xff08;反正不管你知不知道&#xff09;&#xff0c;kafka-maneger更名了&#xff0c;现在叫cmak&#xff01;原因是什么呢&#xff1f;据不可靠小道信息说&#xff0c;原kafka-manager这个名字涉及到kafka商标使用问题&#xff0c;应该是被律师函警告了&#xff…

如何批量创建、提取和重命名文件夹!!!

你是否还在一个一个手动创建文件名&#xff01; 你是否还在一个一个手动提取文件名&#xff01; 你是否还在一个一个手动修改文件名&#xff01; 请随小生一起批量自动创建、提取、重命名&#xff01; 1、批量创建文件夹 【案例】创建1日-31日共31个文件夹 【第一步】在A列…

Gradle学习-5 发布二进制插件

注&#xff1a;以下示例基于Gradle8.0 1、发布插件 复制一分 buildSrc&#xff0c;执行命令行&#xff0c;生成一个新目录 leon-gradle-plugin cp -rf buildSrc leon-gradle-plugin在 leon-gradle-plugin 目录下的 build.gradle 中引入maven plugins{// 引用 Groovy 插件&…

(五十二)第 8 章 动态存储管理(边界标识法)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strr…

Linux环境下的字节对齐现象

在Linux环境下&#xff0c;字节对齐是指数据在内存中的存储方式。字节对齐是为了提高内存访问的效率和性能。 在Linux中&#xff0c;默认情况下&#xff0c;结构体和数组的成员会进行字节对齐。具体的对齐方式可以通过编译器选项来控制。 在使用C语言编写程序时&#xff0c;可…

【Linux】线程——线程的概念、线程的特点、线程的优点和缺点、线程和进程、线程函数的使用

文章目录 Linux线程1. 线程的概念1.1 什么是线程 2. 线程的特点2.1 线程的优点2.2 线程的缺点2.4 线程和进程 3. 线程函数的使用pthread_create() 创建线程pthread_self() 获取线程IDpthread_exit() 线程终止pthread_cancel() 线程取消pthread_join() 线程等待pthread_detach()…

茗鹤 | 如何借助APS高级计划排程系统提高汽车整车制造的效率

在我们做了详尽的市场调研及头部汽车制造企业排程需求沟通后&#xff0c;我们发现尽管企业有很多的业务系统做支撑&#xff0c;在计划排程领域&#xff0c;所有的汽车制造总装厂仍旧使用人工“Excel”做排产规划&#xff0c;其中少部分也会借助MRP、第三方辅助排产工具。鉴于我…

JVM原理(十一):JVM虚拟机六种必需对类进行初始化的情况

Java虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这个过程被称作虚拟机的类加载机制。Java天生可以动态扩展的语言特性就是依赖运行期间动态加载和动态链接这个特…