news 2026/8/12 12:19:28

2026-08-12:统计下标的相反奇偶性得分。用go语言,给定一个整数数组,需要为数组中的每个位置计算一个分数。这个分数等于:在当前索引右侧的所有元素中,与当前元素奇偶性不同(即一个是奇数,另一个是

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2026-08-12:统计下标的相反奇偶性得分。用go语言,给定一个整数数组,需要为数组中的每个位置计算一个分数。这个分数等于:在当前索引右侧的所有元素中,与当前元素奇偶性不同(即一个是奇数,另一个是

2026-08-12:统计下标的相反奇偶性得分。用go语言,给定一个整数数组,需要为数组中的每个位置计算一个分数。这个分数等于:在当前索引右侧的所有元素中,与当前元素奇偶性不同(即一个是奇数,另一个是偶数)的元素个数。最终返回一个与原数组等长的数组,按顺序给出每个索引对应的分数。

1 <= nums.length <= 100。

1 <= nums[i] <= 100。

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

输出: [2,1,1,0]。

解释:

nums[0] = 1,为奇数。因此,下标 j = 1 和 j = 3 满足条件,所以下标 0 的分数为 2。

nums[1] = 2,为偶数。因此,下标 j = 2 满足条件,所以下标 1 的分数为 1。

nums[2] = 3,为奇数。因此,下标 j = 3 满足条件,所以下标 2 的分数为 1。

nums[3] = 4,为偶数。因此,没有下标满足条件,所以下标 3 的分数为 0。

因此,answer = [2, 1, 1, 0]。

题目来自力扣3917。

算法的大体过程:

步骤一:初始化数据结构

  • 获取输入数组nums的长度n
  • 创建一个与nums等长的整型切片(数组)ans,用来存放每个位置最终计算出的分数。
  • 创建一个长度为 2 的整型数组cnt,用来动态记录在从右向左遍历过程中,已经遇到过的偶数和奇数的个数。通常约定cnt[0]存放偶数个数,cnt[1]存放奇数个数,初始都为 0。

步骤二:从右向左遍历数组
使用循环,索引in-1递减到0,逐步处理每一个元素。这么做的目的是保证当我们处理位置i时,所有在它右侧的元素(即索引大于i的元素)都已经被统计进了cnt中。

对于当前索引i,执行以下子步骤:

  1. 判断当前元素的奇偶性
    nums[i] & 1得到当前数字的奇偶标记x。如果nums[i]是奇数,x1;如果是偶数,x0

  2. 查询右侧相反奇偶性的个数
    题目要求的分数是:在当前索引右侧,与当前元素奇偶性不同的元素个数。
    既然当前元素的奇偶性是x,那么与之相反的奇偶性就是x ^ 1(异或运算将0110)。
    cnt数组中,cnt[x ^ 1]存放的,恰好就是已经扫描过的右侧元素中,奇偶性为x ^ 1的个数。
    cnt[x ^ 1]的值赋给ans[i],即得到位置i的得分。

  3. 更新计数器
    当前元素自身现在也要成为“右侧元素”的一部分(供更左侧的索引查询)。因此,将它按奇偶性计入cnt中,即执行cnt[x]++。这样,当遍历到更左边的索引时,当前元素就已经被正确统计在内了。

步骤三:返回结果

  • 循环结束后,ans中已经按顺序存储了每个索引对应的分数,直接返回ans即可。

具体执行示例(输入 [1,2,3,4])

  • 初始:cnt = [0, 0]
  • i=3:nums[3]=4,偶数x=0;右侧相反奇偶性个数cnt[1]=0ans[3]=0;然后cnt[0]加 1 →cnt=[1,0]
  • i=2:nums[2]=3,奇数x=1;右侧相反奇偶性个数cnt[0]=1ans[2]=1;然后cnt[1]加 1 →cnt=[1,1]
  • i=1:nums[1]=2,偶数x=0;右侧相反奇偶性个数cnt[1]=1ans[1]=1;然后cnt[0]加 1 →cnt=[2,1]
  • i=0:nums[0]=1,奇数x=1;右侧相反奇偶性个数cnt[0]=2ans[0]=2;然后cnt[1]加 1 →cnt=[2,2]
  • 最终得到ans = [2, 1, 1, 0],与题目描述一致。

复杂度分析

  • 时间复杂度:算法只对数组进行了一次从右向左的遍历,循环内部只包含常数次位运算、数组访问和自增操作。整体时间复杂度为O(n),其中 n 为数组长度。
  • 额外空间复杂度:除了输入数组外,算法额外使用了一个长度为 n 的结果数组ans和一个固定大小为 2 的计数数组cnt。如果不将输出数组计入额外空间,则辅助空间为O(1);若将必要的输出结构也视为额外空间,则总额外空间复杂度为O(n)。一般在该类问题中,输出数组是必需的,因此可以说总的额外空间复杂度是O(n)

Go完整代码如下:

packagemainimport("fmt")funccountOppositeParity(nums[]int)[]int{n:=len(nums)ans:=make([]int,n)cnt:=[2]int{}fori:=n-1;i>=0;i--{x:=nums[i]&1// x 的奇偶性ans[i]=cnt[x^1]// 查询右侧奇偶性不等于 x(即 x^1)的元素个数cnt[x]++}returnans}funcmain(){nums:=[]int{1,2,3,4}result:=countOppositeParity(nums)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-fromtypingimportListdefcount_opposite_parity(nums:List[int])->List[int]:n=len(nums)ans=[0]*n cnt=[0,0]# cnt[0] 记录右侧偶数个数,cnt[1] 记录右侧奇数个数foriinrange(n-1,-1,-1):parity=nums[i]&1# 当前元素的奇偶性,0为偶,1为奇ans[i]=cnt[parity^1]# 右侧与当前奇偶性不同的元素个数cnt[parity]+=1returnansif__name__=="__main__":nums=[1,2,3,4]result=count_opposite_parity(nums)print(result)

C++完整代码如下:

#include<iostream>#include<vector>std::vector<int>countOppositeParity(conststd::vector<int>&nums){intn=nums.size();std::vector<int>ans(n);intcnt[2]={0,0};// cnt[0] 偶数个数,cnt[1] 奇数个数for(inti=n-1;i>=0;--i){intparity=nums[i]&1;// 当前元素的奇偶性,0偶1奇ans[i]=cnt[parity^1];// 右侧不同奇偶性的元素个数cnt[parity]++;}returnans;}intmain(){std::vector<int>nums={1,2,3,4};std::vector<int>result=countOppositeParity(nums);for(intx:result){std::cout<<x<<" ";}std::cout<<std::endl;return0;}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/12 12:18:00

构建Agent设计三维坐标系:从模式名词表到系统架构思维

1. 项目概述&#xff1a;从“名词表”到“坐标系”的思维跃迁最近在社区和项目里&#xff0c;一个词被反复提及&#xff1a;Agent。随之而来的&#xff0c;是铺天盖地的“Agent模式”讨论。但看得多了&#xff0c;我总有种感觉&#xff0c;很多人把“模式”学成了“名词表”——…

作者头像 李华
网站建设 2026/8/12 12:17:48

企业AI落地实战:从概念到AI Agent应用的全链路解析

1. 从一场活动看企业AI的“冷”与“热” 最近在西安参加了一场名为“帝王蟹”的企业AI落地实战营&#xff0c;活动结束了&#xff0c;但现场那种既兴奋又迷茫的氛围&#xff0c;让我这个在技术圈摸爬滚打十几年的人感触颇深。活动名字挺有意思&#xff0c;“帝王蟹”&#xff0…

作者头像 李华
网站建设 2026/8/12 12:15:51

告别NCM格式限制:3步解锁你的网易云音乐收藏

告别NCM格式限制&#xff1a;3步解锁你的网易云音乐收藏 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐下载的NCM格式文件只能在特定平台播放…

作者头像 李华
网站建设 2026/8/12 12:15:21

静态时序分析中建立与保持时间余量的计算原理与工程实践

1. 从“余量”说起&#xff1a;为什么静态时序分析离不开它在数字芯片设计的后端流程里&#xff0c;静态时序分析&#xff08;Static Timing Analysis, STA&#xff09;是确保芯片能在指定频率下稳定工作的“守门员”。我们常听到工程师说&#xff1a;“这个路径的建立时间余量…

作者头像 李华
网站建设 2026/8/12 12:14:30

5分钟搞定Axure中文界面:零基础快速汉化终极指南

5分钟搞定Axure中文界面&#xff1a;零基础快速汉化终极指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英…

作者头像 李华