力扣周赛398题解

特殊数组Ⅰ

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

Aging 有一个整数数组 nums。如果 nums 是一个 特殊数组 ,返回 true,否则返回 false

示例 1:

输入:nums = [1]

输出:true

解释:

只有一个元素,所以答案为 true

示例 2:

输入:nums = [2,1,4]

输出:true

解释:

只有两对相邻元素: (2,1) 和 (1,4),它们都包含了奇偶性不同的数字,因此答案为 true

示例 3:

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

输出:false

解释:

nums[1] 和 nums[2] 都是奇数。因此答案为 false

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100

        比较暴力,可以直接判断相邻的元素的奇偶性,如果相同返回False,如果检查没有的话,返回True。

代码如下:

class Solution:def isArraySpecial(self, nums: List[int]) -> bool:for x,y in pairwise(nums):if x%2 == y%2:return Falsereturn True

特殊数组Ⅱ

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

周洋哥有一个整数数组 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 都是偶数。

示例 2:

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

输出:[false,true]

解释:

  1. 子数组是 [4,3,1]。3 和 1 都是奇数。因此这个查询的答案是 false
  2. 子数组是 [1,6]。只有一对:(1,6),且包含了奇偶性不同的数字。因此这个查询的答案是 true

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105
  • 1 <= queries.length <= 105
  • queries[i].length == 2
  • 0 <= queries[i][0] <= queries[i][1] <= nums.length - 1

         直接暴力去解决会超时,因为暴力的解法是O(n^2),而数据范围是1e5。

        换一种考虑的方法,既然是要考虑相邻的元素之间的奇偶性,不妨直接考虑他们之间的“逗号”。

        比如说例子——

        4, 3, 1, 6

        我们去考虑每个逗号两侧的数字的奇偶性的相同,如果是相同的话,记为0,不同的话记为1.

        那么就是这样——

        0, 1, 0

做个图:

        但是我们是需要去查询一段区间内是否有这种特殊的数组,不难想到使用前缀和的方法。

        查询的时候发现需要加一个前导0.

        原理就是只要这个区间的两端的端点的前缀和不相等就是False,反之就是True。

代码如下:

class Solution:def isArraySpecial(self, nums: List[int], queries: List[List[int]]) -> List[bool]:s = [0]for x,y in pairwise(nums):s.append(s[-1]+(x%2==y%2))return [s[f] == s[t] for f,t in queries]

所有数对中数位不同之和

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

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

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

示例 1:

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

输出:4

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

示例 2:

输入:nums = [10,10,10,10]

输出:0

解释:
数组中所有整数都相同,所以所有整数数对的数位不同之和为 0 。

提示:

  • 2 <= nums.length <= 105
  • 1 <= nums[i] < 109
  • nums 中的整数都有相同的数位长度。

        题目中说明,只包含有正整数,并且正整数的数位长度是相同的,需要我们返回的是所有正数中不同数位之和。

        把所有的数位分开来考虑,举个例子——

        假如说现在已经考虑到了第1个数(下标为1)的各位,不妨把所有的各位抽出来看看如何计算。

        

        箭头所指向的3,就是我们当前考虑到的地方,那么是如何进行考虑的呢?

        因为我们是要统计每个数字的每一位的不同的数量,下标刚好就是在我们当前这个位置一共有多少个数字,我们可以搞一个哈希表,来统计在我们这个位置之前的,这个位置的值出现的次数。

        又因为这个值只会是【0,9】,所以完全可以使用数组来模拟。

class Solution:def sumDigitDifferences(self, nums: List[int]) -> int:ans = 0cnt = [[0]*10 for _ in str(nums[0])]for k,x in enumerate(nums):for i,v in enumerate(map(int,str(x))):ans += k - cnt[i][v]cnt[i][v]+=1return ans

        

到达第 K 级台阶的方案数

给你有一个 非负 整数 k 。有一个无限长度的台阶,最低 一层编号为 0 。

虎老师有一个整数 jump ,一开始值为 0 。虎老师从台阶 1 开始,虎老师可以使用 任意 次操作,目标是到达第 k 级台阶。假设虎老师位于台阶 i ,一次 操作 中,虎老师可以:

  • 向下走一级到 i - 1 ,但该操作 不能 连续使用,如果在台阶第 0 级也不能使用。
  • 向上走到台阶 i + 2jump 处,然后 jump 变为 jump + 1 。

请你返回虎老师到达台阶 k 处的总方案数。

注意 ,虎老师可能到达台阶 k 处后,通过一些操作重新回到台阶 k 处,这视为不同的方案。

示例 1:

输入:k = 0

输出:2

解释:

2 种到达台阶 0 的方案为:

  • 虎老师从台阶 1 开始。
    • 执行第一种操作,从台阶 1 向下走到台阶 0 。
  • 虎老师从台阶 1 开始。
    • 执行第一种操作,从台阶 1 向下走到台阶 0 。
    • 执行第二种操作,向上走 20 级台阶到台阶 1 。
    • 执行第一种操作,从台阶 1 向下走到台阶 0 。

示例 2:

输入:k = 1

输出:4

解释:

4 种到达台阶 1 的方案为:

  • 虎老师从台阶 1 开始,已经到达台阶 1 。
  • 虎老师从台阶 1 开始。
    • 执行第一种操作,从台阶 1 向下走到台阶 0 。
    • 执行第二种操作,向上走 20 级台阶到台阶 1 。
  • 虎老师从台阶 1 开始。
    • 执行第二种操作,向上走 20 级台阶到台阶 2 。
    • 执行第一种操作,向下走 1 级台阶到台阶 1 。
  • 虎老师从台阶 1 开始。
    • 执行第一种操作,从台阶 1 向下走到台阶 0 。
    • 执行第二种操作,向上走 20 级台阶到台阶 1 。
    • 执行第一种操作,向下走 1 级台阶到台阶 0 。
    • 执行第二种操作,向上走 21 级台阶到台阶 2 。
    • 执行第一种操作,向下走 1 级台阶到台阶 1 。

提示:

  • 0 <= k <= 10^9

        先来解释一下这个题目的意思,说是最小的阶梯是0,从1阶梯开始,要求我们走到k阶梯,有两种操作,但是是有条件的。

        操作一:向下走一级

        操作二:向上走 2^jump 级

        那么很容易想到使用暴力搜索改成记忆化的方法来求解。

        画一个图来帮助我们理解一下——

        那么递归的出口又在哪里呢?

        这需要我们在来分析一下了——

        首先,分析出一个原理,在递归的过程中,数字 i 是逐渐变大的。

        当 i 已经等于 k 的时候我们不能结束,因为他继续搜下去可能会再有一个答案。

        当 i 等于 k + 1 的时候我们还不能结束,因为这个时候只要执行了操作一就可以给结果再加上一个一,变成 i 等于 k,回到第一点。

        当 i 等于 k+2的时候,我们就可以结束了,因为这个时候无论如何 i 都不可能能等于 k 了,直接返回0即可。

        还有一点值得注意的就是我们需要再参数中加上一个bool类型的变量,用来说明喔当前这种情况是否是两个操作都可以做。

最后代码如下:

class Solution:def waysToReachStair(self, k: int) -> int:@cachedef dfs(i:int,j:int,p:bool)->int:if i >= k+2:return 0ans = 1 if i==k else 0ans += dfs(i+(1<<j),j+1,True)if p:ans += dfs(i-1,j,False)return ansreturn dfs(1,0,True)

 

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

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

相关文章

【C++】<知识点> 标准和文件的输入输出

目录 一、输入输出操作 1. 相关的类 2. 标准流对象 3. istream类的成员函数 二、流操纵算子 1. 整数流的基数 2. 浮点数精度的流操纵算子 3. 域宽的流操纵算子 4. 其他的流操纵算子 5. 用户自定义流操纵算子 三、文件读写 1. 文本文件的读写 2. 二进制文件的读写 3. 文件读写…

vue 点击复制文本到剪贴板

一、首先在vue文件的template中定义复制按钮 <div size"small" v-if"item.prop jadeCode" class"cell-container"><span>{{ scope.row.jadeCode }}</span> <button click"handleCopy(scope.row.jadeCode)" clas…

K8s是如何Watch的?

1. 概述 进入 K8s 的世界&#xff0c;会发现几乎所有对象都被抽象为了资源(Resource)&#xff0c;包括 K8s Core Resources(Pod, Service, Namespace 等)、CRD、APIService 扩展的资源类型。同时 K8s 底层将这些资源统一抽象为了 RESTful 的存储(Storage)&#xff0c;一方面服…

jellyfish安装及使用(Bioinformatics工具-020)

01 背景 基因组survey以测序技术为基础&#xff0c;基于小片段文库的低深度测序&#xff0c;通过K-mer分析&#xff0c;快速获得基因组大小、杂合度、重复序列比例等基本信息&#xff0c;为制定该物种的全基因组de novo测序策略提供有效依据。 jellyfish (水母) 是一个用于快…

Docker-镜像迁移的三种方式=>备份恢复公有仓库私有仓库

制作好的镜像要被别人使用&#xff0c;有三种方式&#xff1a; 1.先备份镜像&#xff0c;别人通过u盘或者其它方式拷贝后&#xff0c;再恢复镜像&#xff0c;这种方式比较麻烦 2.将制作的镜像上传到公共镜像仓库&#xff0c;被别人拉取后使用&#xff0c;但可能存在网络不通畅或…

【零基础C语言】内存函数

前言&#xff1a; 我们之前学过strcpy&#xff0c;strcmp等等函数&#xff0c;他们可以拷贝字符串和比较字符串等等&#xff0c;那么有没有什么函数不光可以拷贝字符串还可以拷贝其他的数据呢&#xff0c;答案就是内存函数。 相较于字符串函数&#xff0c;内存函数可以拷贝的…

赎金信[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你两个字符串&#xff1a;ransomNote和magazine&#xff0c;判断ransomNote能不能由magazine里面的字符构成。如果可以&#xff0c;返回true&#xff1b;否则返回false。magazine中的每个字符只能在ransomNote中使用一次。 示例 …

DPDK实践之(1)dpdk基础使用

DPDK实践之(1)dpdk基础使用 Author: Once Day Date: 2024年5月19日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;Linux基础知识_Once…

C语言 | Leetcode C语言题解之第109题有序链表转换二叉搜索树

题目&#xff1a; 题解&#xff1a; int getLength(struct ListNode* head) {int ret 0;while (head ! NULL) {ret, head head->next;}return ret; }struct TreeNode* buildTree(struct ListNode** head, int left, int right) {if (left > right) {return NULL;}int …

Mac维护神器CleanMyMac X成为你的苹果电脑得力助手

在数字化时代&#xff0c;Mac电脑已成为众多用户的首选。然而&#xff0c;随着频繁的使用和数据量的日益增长&#xff0c;许多Mac用户面临着系统杂乱、存储空间不足以及隐私保护等问题。幸运的是&#xff0c;"CleanMyMac X"这款优化和清理工具应运而生&#xff0c;它…

ROCm上情感分析:使用循环神经网络

15.2. 情感分析&#xff1a;使用循环神经网络 — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import torch from torch import nn from d2l import torch as d2lbatch_size 64 train_iter, test_iter, vocab d2l.load_data_imdb(batch_size)class BiRNN(nn.Module):…

java抽象类,接口,枚举练习题

第一题&#xff1a; 答案&#xff1a; class Animal{//成员变量protected String name;protected int weight;//构造方法public Animal(){this.name"refer";this.weight50;}public Animal(String name,int weight){this.namename;this.weightweight;}//成员方法publ…

Bugku Crypto 部分题目简单题解(四)

目录 python_jail 简单的rsa 托马斯.杰斐逊 这不是md5 进制转换 affine Crack it rsa python_jail 启动场景 使用虚拟机nc进行连接 输入print(flag) 发现报错&#xff0c;经过测试只能传入10个字符多了就会报错 利用python中help()函数&#xff0c;借报错信息带出flag变…

【力扣刷题笔记第三期】Python 数据结构与算法

先从简单的题型开始刷起&#xff0c;一起加油啊&#xff01;&#xff01; 点个关注和收藏呗&#xff0c;一起刷题鸭&#xff01;&#xff01; 第一批题目 1.设备编号 给定一个设备编号区间[start, end]&#xff0c;包含4或18的编号都不能使用&#xff0c;如&#xff1a;418、…

java抽象类和接口知识总结

一.抽象类 1.啥是抽象类 用专业语言描述就是&#xff1a;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类 当然这话说的也很抽象&#xff0c;所以我们来用人话来解释一下抽象类 抛开编程语言这些&#xff0c;就以现实举例&#xff0c;我…

每日练习之排序——链表的合并;完全背包—— 兑换零钱

链表的合并 题目描述 运行代码 #include<iostream> #include<algorithm> using namespace std; int main() { int a[31];for(int i 1;i < 30;i)cin>>a[i];sort(a 1,a 1 30);for(int i 1;i < 30;i)cout<<a[i]<<" ";cout&…

Mysql之Innodb存储引擎

1.Innodb数据存储 innodb如今能够做到mysql的默认数据存储引擎&#xff0c;肯定有着其好处的&#xff0c;那么innodb有什么好处呢? 1. 当意外断电或者重启&#xff0c; InnoDB 能够做到奔溃恢复&#xff0c;撤销没有提交的数据 2.InnoDB 存储引擎维护自己的缓冲池&#xff0c…

医院挂号就诊系统的设计与实现

前端使用Vue.js 后端使用SpiringBoot MyBatis 数据使用MySQL 需要项目和论文加企鹅&#xff1a;2583550535 医院挂号就诊系统的设计与实现_哔哩哔哩_bilibili 随着社会的发展&#xff0c;医疗资源分布不均&#xff0c;患者就诊难、排队时间长等问题日益突出&#xff0c;传统的…

Hadoop3:HDFS的Fsimage和Edits文件介绍

一、概念 Fsimage文件&#xff1a;HDFS文件系统元数据的一个永久性的检查点&#xff0c;其中包含HDFS文件系统的所有目 录和文件inode的序列化信息。 Edits文件&#xff1a;存放HDFS文件系统的所有更新操作的路径&#xff0c;文件系统客户端执行的所有写操作首先 会被记录到Ed…

二叉树的链式结构

1.二叉树的遍历 2.二叉树链式结构的实现 3.解决单值二叉树题 1.二叉树的遍历 1.1前序&#xff0c;中序以及后序遍历 二叉树的遍历是按照某种特定的规则&#xff0c;依次对二叉树的结点进行相应的操作&#xff0c;并且每个结点只操作一次。 二叉树的遍历有这些规则&#xff…