Leetcode - 398周赛

目录

一,3151. 特殊数组 I

二,3152. 特殊数组 II

三,3153. 所有数对中数位不同之和

四,3154. 到达第 K 级台阶的方案数


一,3151. 特殊数组 I

本题就是判断一个数组是否是奇偶相间的,如果是,返回true;否则,返回false,直接暴力

代码如下: 

class Solution {
    public boolean isArraySpecial(int[] nums) {
        int n = nums.length;
        for(int i=1; i<n; i++){
            if(nums[i]%2 == nums[i-1]%2)
                return false;
        }
        return true;
    }
}

二,3152. 特殊数组 II

本题就是判断nums数组在 [from,to] 的区间是否满足奇偶相间。由于数据范围太大,无法暴力。其实我们可以预处理一下,先统计出数组pre[i]:表示以 i 为右端点的满足条件的最小左端点。再遍历queries数组,判断这里的左端点是否>=pre[queries[i][1]],如果大于等于,ans[i] = true;如果小于,ans[i] = false;

class Solution {
    public boolean[] isArraySpecial(int[] nums, int[][] queries) {
        int n = nums.length;
        int[] pre = new int[n];
        for(int r=1; r<n; r++){
            if(nums[r]%2 != nums[r-1]%2){
                pre[r] = pre[r-1];
            }else{
                pre[r] = r;
            }
        }
        boolean[] ans = new boolean[queries.length];
        for(int i=0; i<queries.length; i++){
            ans[i] = pre[queries[i][1]] <= queries[i][0];
        }
        return ans;
    }
}

前缀和做法:

我们定义一个a[i]:表示nums[i] 和 nums[i+1]是否是奇偶相间的,a[i] = 0,表示两个数一奇一偶;a[i] = 1,表示两个数同奇同偶。如果想要得知【from,to】区间是否是特殊数组,就是判断数组a在【from,to-1】区间是否出现过1(即区间和是否>0),这就变成了一个求前缀和的问题。

代码如下:

class Solution {
    public boolean[] isArraySpecial(int[] nums, int[][] queries) {
        int[] s = new int[nums.length];//a数组的前缀和数组
        for(int i=1; i<nums.length; i++){
            s[i] = s[i-1] + (nums[i-1]%2==nums[i]%2?1:0);
        }
        boolean[] ans = new boolean[queries.length];
        for(int i=0; i<queries.length; i++){
            ans[i] = s[queries[i][0]] == s[queries[i][1]];
        }
        return ans;
    }
}

三,3153. 所有数对中数位不同之和

本题可以从个位,十位,百位.....依次进行计算,而单个位上的计算,就变成了这个问题——给你一个长为 n 的数组 a,只包含数字 0 到 9,其中有多少个不同的数对?我们可以遍历数组a,使用一个数组或哈希表记录<出现过的数字,出现次数>,如果当前数字 d 没有出现过,ans += k,表示d能与前面出现的所有数字组成数对(k表示之前出现了k个数字),如果d出现过,ans += k - cnt[d],表示d能与k - cnt[d] 个数组成数对。

代码如下:

class Solution {
    public long sumDigitDifferences(int[] nums) {
        int n = String.valueOf(nums[0]).length();
        long[][] cnt = new long[n][10];
        long ans = 0;
        for(int i=0; i<nums.length; i++){
            int x = nums[i];
            int j = 0;
            while(x > 0){
                if(cnt[j][x%10]==0){
                    ans += i;
                }else{
                    ans += i-cnt[j][x%10];
                }
                cnt[j][x%10]++;
                j++;
                x /= 10;
            }
        }
        return ans;
    }
}

四,3154. 到达第 K 级台阶的方案数

dfs(i,j,flg):在该状态下,到达台阶k的总方案数

  • i:表示当前所处的位置
  • j:表示使用操作二的次数
  • flg:表示前一次操作是否使用操作一,这个参数是为了判断当前能否使用操作一,因为题目中规定不能连续使用操作一

它的转移来源:

  • 使用操作一:前提 flg == false && i > 0,接下来要解决的子问题就是 dfs(i-1,j,true),加入返回值中
  • 使用操作二:随时都能使用,接下来要解决的子问题就是 dfs(i+(1<<j),j+1,false),加入返回值中
  • 因为题目可以在它到达台阶k处继续操作,所以该条件不能作为结束条件,但是它也是一个正确的方案,所以当 i == k 时,返回值+1

结束条件:我们发现操作一最多只能回退一个台阶,而操作二除了第一次上1个台阶,其余都>1,所以可以发现如果 i > k + 1,那么就再也回不到台阶 k 了,因此结束条件是 i > k + 1,返回 0.

代码如下:

class Solution {
    public int waysToReachStair(int k) {
        return dfs(1, 0, k, false);
    }
    Map<String, Integer> map = new HashMap<>();
    int dfs(int i, int j, int k, boolean flg){
        if(i > k+1) return 0;
        String key = i + " " + j + " " + flg;
        if(map.containsKey(key)) return map.get(key);
        int res = i==k?1:0;
        if(flg == false)
            res += dfs(i-1, j, k, true);
        res += dfs(i+(1<<j), j+1, k, false);
        map.put(key, res);
        return res;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Floodfill算法】dfs或者bfs解决floodfill算法

1.图像渲染 图像渲染 dfs解决代码&#xff1a; class Solution { public:int dx[4] {0, 0, -1, 1};int dy[4] {-1, 1, 0, 0};int m, n;int prev;vector<vector<int>> ret;vector<vector<int>> floodFill(vector<vector<int>>& ima…

Java并发: 锁和同步

在Java并发: 面临的挑战那一篇中我们提到锁和同步是实现并发安全(可见性/原子性)的方法之一。这一章我们来讲讲Java中的锁和同步的各种工具&#xff0c;包括: LockSupportAbstractQueuedSynchronizerJava内置的锁实现 1. LockSupport LockSupport是基于Unsafe的park/unpark实…

linux 查看java线程与linux线程关系

linux 查看占用cpu高的 java 线程 linux 排查cpu占用100%故障 ##java程序 import java.util.Scanner; public class JavaThreadIDName {public static void main(String[] args) {Thread t Thread.currentThread();t.setName("laoyoutiao");System.out.println(&…

golang创建式设计模式---工厂模式

创建式设计模式—工厂模式 目录导航 创建式设计模式---工厂模式1)什么是工厂模式2)使用场景3)实现方式4)实践案例5)优缺点分析 1)什么是工厂模式 工厂模式(Factory Method Pattern)是一种设计模式&#xff0c;旨在创建对象时&#xff0c;将对象的创建与使用进行分离。通过定义…

以太坊(2)——共识机制与挖矿算法

共识机制 ETH采用的是基于GHOST协议的共识机制 "GHOST"&#xff08;Greedy Heaviest-Observed Sub-Tree&#xff09;共识机制&#xff0c;它是以太坊使用的一种改进的区块链共识算法。GHOST共识机制旨在提高链的安全性和效率&#xff0c;通过考虑非主链区块的贡献&…

kubectl详解

文章目录 kubectl详解一、陈述式管理1、陈述式资源管理方法2、k8s相关信息查看2.1 查看版本信息2.1.1 查看资源对象简写2.1.2 查看集群信息2.1.3 配置kubectl自动补全2.1.4 查看日志 2.2 基本信息查看2.2.1 查看集群状态2.2.2 查看命名空间 2.3 命名空间操作2.3.1 查看default命…

CDN用户平台安装说明

CDN用户平台安装说明 登录管理员系统 在”系统设置” – “高级设置” – “用户节点”中点击”添加节点” 如果所示&#xff1a; 节点名称 - 可以任意填写 进程监听端口 - 启动用户节点后&#xff0c;进程所监听的端口&#xff0c;通常是HTTP 80或者HTTPS 443&#xff0c;…

html 段落与排版标记 Web前端开发技术、详细文章(例如)

段落与排版标记 网页的外观是否美观&#xff0c;很大程度上取决于其排版。在页面中出现大段的文字&#xff0c;通常采用分段进行规划&#xff0c;对换行也有极其严格的划分。本节从段落的细节设置入手&#xff0c;利用段落与排版标记自如地处理大段的文字。 段落p标记 在HTM…

Spring Cloud Gateway 网关

一. 什么是网关&#xff08;Gateway&#xff09; 网关就是一个网络连接到另一个网络的关口。 在同一个项目或某一层级中&#xff0c;存在相似或重复的东西&#xff0c;我们就可以将这些相似重复的内容统一提取出来&#xff0c;向前或向后抽象成单独的一层。这个抽象的过程就是…

Linux磁盘高级操作

RAID RAID存储系统是一种数据存储虚拟化技术&#xff0c;它将多个物理磁盘驱动器组合成一个或多个逻辑单元&#xff0c;以提供数据冗余和/或提高性能。 1. RAID 0 无奇偶校验与冗余&#xff08;磁盘容错&#xff09;的条带存储&#xff08;带区卷/条带卷&#xff09; 由两块…

Linux-文件或目录权限

在使用 ll 时&#xff0c;可以查看文件夹内容的详细信息&#xff0c;信息的第1位表示类型&#xff0c;具体信息如下&#xff1a; 类型说明-普通文件d文件夹b块设备文件c字符设备文件p管道文件s套接口文件 第2-10位表示权限&#xff0c; 举例&#xff1a;rwxr-xr-x 类型说明r…

简单快捷的图片格式转换工具:认识webp2jpg-online

经常写博客或记笔记的朋友们可能会碰到图床不支持的图片格式或图片太大需要压缩的情况。通常&#xff0c;我们会在浏览器中搜索在线图片格式转换器&#xff0c;但这些转换器往往伴有烦人的广告或要求登录&#xff0c;并且支持的转换格式有限。最近&#xff0c;我在浏览 GitHub …

java8总结

java8总结 java8新特性总结1. 行为参数化2. lambda表达式2.1 函数式接口2.2 函数描述符 3. Stream API3.1 付诸实践 java8新特性总结 行为参数化lambda表达式Stream Api 1. 行为参数化 定义&#xff1a;行为参数化&#xff0c;就是一个方法接受多个不同的行为作为参数&#x…

HiWoo Box边缘计算网关

​在数字化浪潮汹涌的今天&#xff0c;边缘计算网关成为了连接物理世界与数字世界的桥梁&#xff0c;其重要性日益凸显。HiWoo Box&#xff0c;作为一款功能强大的边缘计算网关&#xff0c;不仅具备了传统网关的基本功能&#xff0c;更在数据采集、处理、传输等方面展现出了卓越…

岛屿问题刷题

200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int numIslands(char[][] grid) {int n grid.length;//grid行数int m grid[0].length;//grid列数int res 0;for(int r 0;r<n;r){for(int c0;c<m;c){if(grid[r][c]1){dfs(grid,r,c);res…

Web Server项目实战3-Web服务器简介及HTTP协议

Web Server&#xff08;网页服务器&#xff09; 一个 Web Server 就是一个服务器软件&#xff08;程序&#xff09;&#xff0c;或者是运行这个服务器软件的硬件&#xff08;计算机&#xff09;。其主要功能是通过 HTTP 协议与客户端&#xff08;通常是浏览器&#xff08;Brow…

面试八股之MySQL篇5——主从同步原理篇

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…

绿色智能:AI机器学习在环境保护中的深度应用与实践案例

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

CSS transform 三大属性 rotate、scale、translate

transform 浏览器支持定义和用法translate位移函数rotate旋转函数scale缩放函数 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 紧跟在 -webkit-, -ms- 或 -moz- 前的数字为支持该前缀属性的第一个浏览器版本号。 定义和用法 transform 属性向元素应用 2D…

音视频安卓主板记录仪手持终端定制开发_基于MT6762平台解决方案

音视频安卓主板采用了基于MT6762高性能处理器芯片的设计&#xff0c;其中包括4个主频高达2.0GHz的Cortex-A53核心和4个主频1.5GHz的Cortex-A53高效聚焦核心&#xff0c;可提供无比流畅的体验。搭载Android 12操作系统&#xff0c;系统版本进行了全新的优化&#xff0c;进一步确…