网易首页 > 网易号 > 正文 申请入驻

2026-08-12:统计下标的相反奇偶性得分。用go语言,给定一个整数数组,需要为数组中的每个位置计算一个分数。这个分数等于:在当前索引右

0
分享至

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。

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

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

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

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

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

步骤三:返回结果

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

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

  • • 初始:cnt = [0, 0]

  • • i=3:nums[3]=4,偶数x=0;右侧相反奇偶性个数cnt[1]=0,ans[3]=0;然后cnt[0]加 1 →cnt=[1,0]。

  • • i=2:nums[2]=3,奇数x=1;右侧相反奇偶性个数cnt[0]=1,ans[2]=1;然后cnt[1]加 1 →cnt=[1,1]。

  • • i=1:nums[1]=2,偶数x=0;右侧相反奇偶性个数cnt[1]=1,ans[1]=1;然后cnt[0]加 1 →cnt=[2,1]。

  • • i=0:nums[0]=1,奇数x=1;右侧相反奇偶性个数cnt[0]=2,ans[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完整代码如下:

package main

import (
"fmt"
)

func countOppositeParity(nums []int) []int {
n := len(nums)
ans := make([]int, n)
cnt := [2]int{}
for i := n - 1; i >= 0; i-- {
x := nums[i] & 1 // x 的奇偶性
ans[i] = cnt[x^1] // 查询右侧奇偶性不等于 x(即 x^1)的元素个数
cnt[x]++
}
return ans
}

func main() {
nums := []int{1, 2, 3, 4}
result := countOppositeParity(nums)
fmt.Println(result)
}

Python完整代码如下:

# -*-coding:utf-8-*-

from typing import List

def count_opposite_parity(nums: List[int]) -> List[int]:
n = len(nums)
ans = [0] * n
cnt = [0, 0] # cnt[0] 记录右侧偶数个数,cnt[1] 记录右侧奇数个数
for i in range(n - 1, -1, -1):
parity = nums[i] & 1 # 当前元素的奇偶性,0为偶,1为奇
ans[i] = cnt[parity ^ 1] # 右侧与当前奇偶性不同的元素个数
cnt[parity] += 1
return ans

if __name__ == "__main__":
nums = [1, 2, 3, 4]
result = count_opposite_parity(nums)
print(result)

C++完整代码如下:

  



std::vector countOppositeParity(const std::vector& nums) {
int n = nums.size();
std::vector ans(n);
int cnt[2] = {0, 0}; // cnt[0] 偶数个数,cnt[1] 奇数个数
for (int i = n - 1; i >= 0; --i) {
int parity = nums[i] & 1; // 当前元素的奇偶性,0偶1奇
ans[i] = cnt[parity ^ 1]; // 右侧不同奇偶性的元素个数
cnt[parity]++;
}
return ans;
}

int main() {
std::vector nums = {1, 2, 3, 4};
std::vector result = countOppositeParity(nums);
for (int x : result) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
3大新援已有两个水货!曼联高层承认夏窗引援水准欠佳

3大新援已有两个水货!曼联高层承认夏窗引援水准欠佳

球事百科吖
2026-10-13 04:22:45
“陈皮骗局”爆火:刺痛了多少中国人...

“陈皮骗局”爆火:刺痛了多少中国人...

温伯陵的烟火人间
2026-10-12 21:38:16
欧美港口:拆掉中国设备!工人拆完,领导:我让你拆的是,Logo

欧美港口:拆掉中国设备!工人拆完,领导:我让你拆的是,Logo

星落山间
2026-09-07 00:46:19
6-4到4-2!海港火力全开,蒋光太缺阵后防吃紧,大田反击暗藏杀机

6-4到4-2!海港火力全开,蒋光太缺阵后防吃紧,大田反击暗藏杀机

汪星人哟
2026-10-13 08:07:48
开播一天拿下热度冠军!观众盛赞:首集就欲罢不能

开播一天拿下热度冠军!观众盛赞:首集就欲罢不能

小椰的奶奶
2026-10-13 02:16:05
单年暴跌60万辆后绝地反击,广州这次押上全部家底

单年暴跌60万辆后绝地反击,广州这次押上全部家底

音乐时光的娱乐
2026-10-12 16:21:11
出战4分钟0分5犯2失误!辽篮潜力中锋被打回原形:这状态咋接班韩德君

出战4分钟0分5犯2失误!辽篮潜力中锋被打回原形:这状态咋接班韩德君

篮球快餐车
2026-10-13 05:49:10
2026年值得考虑的7款富士相机

2026年值得考虑的7款富士相机

固件更新中
2026-10-12 06:56:09
许志安演唱会落幕,郑秀文后台深情相拥:人生没有放弃自己的理由

许志安演唱会落幕,郑秀文后台深情相拥:人生没有放弃自己的理由

吃青菜长高
2026-10-12 13:04:35
我才65岁,儿子就要送我去养老院,我无奈同意,临行前去银行注销了银行卡,入住7天后,儿子跑来找我:妈,我这个月的房贷怎么逾期了?

我才65岁,儿子就要送我去养老院,我无奈同意,临行前去银行注销了银行卡,入住7天后,儿子跑来找我:妈,我这个月的房贷怎么逾期了?

蝉吟槐蕊
2026-10-12 23:23:58
吃饭决定寿命?医生发现:活过85岁的老人,吃饭一般都有4特点

吃饭决定寿命?医生发现:活过85岁的老人,吃饭一般都有4特点

医学原创故事会
2026-10-11 23:26:04
广东3消息!杜锋重返宏远,胡明轩官宣担任队长,三外援首秀时间确定

广东3消息!杜锋重返宏远,胡明轩官宣担任队长,三外援首秀时间确定

多特体育说
2026-10-12 20:37:40
拜仁豪掷天价挖角!巴萨核心坐冷板凳!弗里克或逼走诺坎普大将

拜仁豪掷天价挖角!巴萨核心坐冷板凳!弗里克或逼走诺坎普大将

奶盖熊本熊
2026-10-13 07:43:00
花800块跑了900亿Token:Kimi做设计、GLM干活、DeepSeek审计、豆包管图片,这套国产AI组合到底值不值

花800块跑了900亿Token:Kimi做设计、GLM干活、DeepSeek审计、豆包管图片,这套国产AI组合到底值不值

阿鑫讲ai
2026-10-12 23:46:16
蔡国庆每月给弟弟蔡军发2万工资,发了20年,一共480万,条件就一个:在家全职照顾得阿尔茨海默症的母亲

蔡国庆每月给弟弟蔡军发2万工资,发了20年,一共480万,条件就一个:在家全职照顾得阿尔茨海默症的母亲

LULU生活家
2026-09-02 19:51:47
智能电插座遭黑客攻击致多地鱼友“全缸覆灭”?厂商:部分产品被攻击,已报警

智能电插座遭黑客攻击致多地鱼友“全缸覆灭”?厂商:部分产品被攻击,已报警

封面新闻
2026-10-12 10:05:14
曾经“红极一时”,如今“跌下神坛”的3家服装品牌,你买过吗?

曾经“红极一时”,如今“跌下神坛”的3家服装品牌,你买过吗?

李健政观察
2026-09-04 00:22:56
灵活就业想靠单位缴社保,就算不要工资,也不是这么简单

灵活就业想靠单位缴社保,就算不要工资,也不是这么简单

娱乐圈见解说
2026-10-13 03:13:35
放进冰箱变“毒药”,这6种食物千万不要放冰箱冷藏,尤其是第6种

放进冰箱变“毒药”,这6种食物千万不要放冰箱冷藏,尤其是第6种

神牛
2026-10-11 16:13:59
海蒂·克鲁姆泳池边半裸晒照!只穿丁字裤,配文洛杉矶很热

海蒂·克鲁姆泳池边半裸晒照!只穿丁字裤,配文洛杉矶很热

草莓解说体育
2026-10-12 03:50:51
2026-10-13 09:35:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1511文章数 83关注度
往期回顾 全部

科技要闻

尊界:10月底确认制动踏板支架升级方案

头条要闻

牛弹琴:美国突然转向俄罗斯一边 欧洲看得目瞪口呆

头条要闻

牛弹琴:美国突然转向俄罗斯一边 欧洲看得目瞪口呆

体育要闻

一周吃6顿披萨的胖子,也能单防姆巴佩?

娱乐要闻

张艺谋身体状况曝光 陈婷不再顾及体面

财经要闻

险资“追涨杀跌”致科技股持续回调?

汽车要闻

小鹏G9L巴黎车展全球上市 法国市场售价74990欧元起

态度原创

健康
游戏
时尚
本地
军事航空

孩子运动莫名晕倒?当心这类疾病

《最终幻想7:启示》NS2版画质力争超越《重生》

从低谷到巅峰,她让中国网球等了二十年

本地新闻

踏访沙县第一村,寻国民小吃本源

军事要闻

视频:沙特方面公布利雅得机场遭袭画面

无障碍浏览 进入关怀版