leetcode 1787. 使所有区间的异或结果为零

题目

给你一个整数数组 nums​​​ 和一个整数 k​​​​​ 。区间 [left, right](left <= right)的 异或结果 是对下标位于 left 和 right(包括 left 和 right )之间所有元素进行 XOR 运算的结果:nums[left] XOR nums[left+1] XOR … XOR nums[right] 。

返回数组中 要更改的最小元素数 ,以使所有长度为 k 的区间异或结果等于零。

示例 1:

输入:nums = [1,2,0,3,0], k = 1
输出:3
解释:将数组 [1,2,0,3,0] 修改为 [0,0,0,0,0]
示例 2:

输入:nums = [3,4,5,2,1,7,3,4,7], k = 3
输出:3
解释:将数组 [3,4,5,2,1,7,3,4,7] 修改为 [3,4,7,3,4,7,3,4,7]
示例 3:

输入:nums = [1,2,4,1,2,5,1,2,6], k = 3
输出:3
解释:将数组[1,2,4,1,2,5,1,2,6] 修改为 [1,2,3,1,2,3,1,2,3]

解题思路

题目分析

假设有x1 x2 x3 x4 x5 k=3

  • 根据题意可得x1x2x3=x2x3x4=x3x4x5=0
  • 可以推出x1=x4 x2=x5 x3=x6 …
    所以我们只需要使得x1x2x3==0即可,因为x1=x4 所以将其代入得x4x2x3=0,就能使得第二个子数组的结果也为0了。我们只需要确定前k个数,就能把后面整个数组都确定了,并且后面的每个子数组都是满足异或结果为0的。

动态规划

现在问题是需要使得x1x2x3==0,并且对数组的更改次数是最少的

数组定义

  • 使用dp[i][j]记录—使得前i个数字异或结果为j的最小更换次数
  • i的取值范围0,k-1,j的取值范围0,1024
  • 最终的结果就是dp[k-1][0]

状态转移

可以通过map记录每个数字出现的次数,从而计算出修改了nums[i]以后整个数组需要的修改次数
cnt[i]记录下前i+1个数字的最少更换次数(任意的异或结果均可)

  1. 当dp[i][j]的i=0,说明是第一个数字,没办法从前面的转移而来
              for (int j=0;j<max;j++){dp[0][j]=num-map.getOrDefault(j,0);cnt[0]= Math.min(cnt[0],dp[0][j]);}

异或的结果就是第一个数字的本身,所以只需要减去该异或结果出现的次数,就能得出需要更换的次数
2. 当dp[i][j]的i!=0,说明不是第一个数字,可以从前面的转移而来

                for (int j=0;j<max;j++){dp[i][j]=cnt[i-1]+num;for (Integer integer : map.keySet()) {dp[i][j]=Math.min(dp[i][j],dp[i-1][integer^j]+num-map.get(integer));}cnt[i]= Math.min(cnt[i],dp[i][j]);}

分为两种情况。一是将nums[i]…nums[i+k]这个序列的全部更换为序列以外的元素dp[i][j]=cnt[i-1]+num;。二是用这个序列里面的某一个元素替代掉这个序列 dp[i][j]=Math.min(dp[i][j],dp[i-1][integer^j]+num-map.get(integer));

代码

class Solution {public int minChanges(int[] nums, int k) {int max=1024,n=nums.length;int[][] dp = new int[k][max];int[]cnt=new int[k];for(int i=0;i<k;i++){Arrays.fill(dp[i],Integer.MAX_VALUE);cnt[i]=Integer.MAX_VALUE;}for(int i=0;i<k;i++){int num=0;Map<Integer,Integer> map=new HashMap<>();for (int j=i;j<n;j+=k){map.put(nums[j],map.getOrDefault(nums[j],0)+1);num++;}if (i==0){}else {for (int j=0;j<max;j++){dp[i][j]=cnt[i-1]+num;for (Integer integer : map.keySet()) {dp[i][j]=Math.min(dp[i][j],dp[i-1][integer^j]+num-map.get(integer));}cnt[i]= Math.min(cnt[i],dp[i][j]);}}}return dp[k-1][0];}
}

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

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

相关文章

【JavaScript】网站源码防止被人另存为

1、禁示查看源代码 从"查看"菜单下的"源文件"中同样可以看到源代码&#xff0c;下面我们就来解决这个问题&#xff1a; 其实这只要使用一个含有<frame></frame>标记的网页便可以达到目的。 <frameset> <frame src"你要保密的文件…

梯度 cv2.sobel_TensorFlow 2.0中连续策略梯度的最小工作示例

梯度 cv2.sobelAt the root of all the sophisticated actor-critic algorithms that are designed and applied these days is the vanilla policy gradient algorithm, which essentially is an actor-only algorithm. Nowadays, the actor that learns the decision-making …

共享语义 unix语义_语义UI按钮

共享语义 unix语义什么是语义UI按钮&#xff1f; (What are Semantic UI Buttons?) A button indicates a possible user action. Semantic UI provides an easy-to-use syntax that simplifies not only the styling of a button, but also the natural language semantics.按…

垃圾回收算法优缺点对比

image.pngGC之前 说明&#xff1a;该文中的GC算法讲解不仅仅局限于某种具体开发语言。 mutator mutator 是 Edsger Dijkstra 、 琢磨出来的词&#xff0c;有“改变某物”的意思。说到要改变什么&#xff0c;那就是 GC 对象间的引用关系。不过光这么说可能大家还是不能理解&…

标准C程序设计七---77

Linux应用 编程深入 语言编程标准C程序设计七---经典C11程序设计 以下内容为阅读&#xff1a; 《标准C程序设计》&#xff08;第7版&#xff09; 作者&#xff1a;E. Balagurusamy&#xff08;印&#xff09;&#xff0c; 李周芳译 清华大学出版社…

leetcode 1190. 反转每对括号间的子串

题目 给出一个字符串 s&#xff08;仅含有小写英文字母和括号&#xff09;。 请你按照从括号内到外的顺序&#xff0c;逐层反转每对匹配括号中的字符串&#xff0c;并返回最终的结果。 注意&#xff0c;您的结果中 不应 包含任何括号。 示例 1&#xff1a; 输入&#xff1a…

yolo人脸检测数据集_自定义数据集上的Yolo-V5对象检测

yolo人脸检测数据集计算机视觉 (Computer Vision) Step by step instructions to train Yolo-v5 & do Inference(from ultralytics) to count the blood cells and localize them.循序渐进的说明来训练Yolo-v5和进行推理(来自Ultralytics )以对血细胞进行计数并将其定位。 …

oauth2-server-php-docs 授权类型

授权码 概观 在Authorization Code交付式时使用的客户端想要请求访问受保护资源代表其他用户&#xff08;即第三方&#xff09;。这是最常与OAuth关联的授予类型。 详细了解授权码 用例 代表第三方来电履行 创建一个实例OAuth2\GrantType\AuthorizationCode并将其添加到您的服务…

flask框架视图和路由_角度视图,路由和NgModule的解释

flask框架视图和路由Angular vs AngularJS (Angular vs AngularJS) AngularJS (versions 1.x) is a JavaScript-based open source framework. It is cross platform and is used to develop Single Page Web Application (SPWA). AngularJS(版本1.x)是一个基于JavaScript的开源…

NGUI EventDelagate事件委托

using System.Collections; using System.Collections.Generic; using UnityEngine;public class BUttonClick : MonoBehaviour {public UIButton button_01;void Start(){if (button_01 null){Debug.Log("button组件丢失了");}else{//首先将脚本中的ClicktheButton…

leetcode 461. 汉明距离(位运算)

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y&#xff0c;计算它们之间的汉明距离。 注意&#xff1a; 0 ≤ x, y < 231. 示例:输入: x 1, y 4输出: 2解释: 1 (0 0 0 1) 4 (0 1 0 0)↑ ↑上面的箭头指出了对应二进…

图深度学习-第2部分

有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) These are the lecture notes for FAU’s YouTube Lecture “Deep Learning”. This is a full transcript of the lecture video & matching slides. We hope, you enjoy this as much as the videos. Of cou…

Linux下 安装Redis并配置服务

一、简介 1、 Redis为单进程单线程模式&#xff0c;采用队列模式将并发访问变成串行访问。 2、 Redis不仅仅支持简单的k/v类型的数据&#xff0c;同时还提供list&#xff0c;set&#xff0c;zset&#xff0c;hash等数据结构的存储。 3、 Redis支持数据的备份&#xff0c;即mas…

大omega记号_什么是大欧米茄符号?

大omega记号Similar to big O notation, big Omega(Ω) function is used in computer science to describe the performance or complexity of an algorithm.与大O表示法相似&#xff0c;大Omega(Ω)函数在计算机科学中用于描述算法的性能或复杂性。 If a running time is Ω…

leetcode 477. 汉明距离总和(位运算)

theme: healer-readable 题目 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中&#xff0c;任意两个数之间汉明距离的总和。 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中&#xff0c;4表示为0100&#xff0c;14表示为1110&…

什么是跨域及跨域请求资源的方法?

1、由于浏览器同源策略&#xff0c;凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。 2、跨域请求资源的方法&#xff1a; (1)、porxy代理(反向服务器代理) 首先将用户发送的请求发送给中间的服务器&#xff0c;然后通过中间服务器再发送给后台服…

量子信息与量子计算_量子计算为23美分。

量子信息与量子计算On Aug 13, 2020, AWS announced the General Availability of Amazon Braket. Braket is their fully managed quantum computing service. It is available on an on-demand basis, much like SageMaker. That means the everyday developer and data scie…

全面理解Java内存模型

Java内存模型即Java Memory Model&#xff0c;简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型&#xff0c;所以JMM是隶属于JVM的。 如果我们要想深入了解Java并发编程&#xff0c;就要先理解好Java内存模型。Java内存模型定义了多…

React Native指南

React本机 (React Native) React Native is a cross-platform framework for building mobile applications that can run outside of the browser — most commonly iOS and Android applicationsReact Native是一个跨平台框架&#xff0c;用于构建可在浏览器外部运行的移动…

leetcode 1074. 元素和为目标值的子矩阵数量(map+前缀和)

给出矩阵 matrix 和目标值 target&#xff0c;返回元素总和等于目标值的非空子矩阵的数量。 子矩阵 x1, y1, x2, y2 是满足 x1 < x < x2 且 y1 < y < y2 的所有单元 matrix[x][y] 的集合。 如果 (x1, y1, x2, y2) 和 (x1’, y1’, x2’, y2’) 两个子矩阵中部分坐…