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

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。

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

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

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

  2. 2.查询右侧相反奇偶性的个数
    题目要求的分数是:在当前索引右侧,与当前元素奇偶性不同的元素个数。
    既然当前元素的奇偶性是x,那么与之相反的奇偶性就是x ^ 1(异或运算将0110)。
    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]=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完整代码如下:

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.

相关推荐
热点推荐
别人直播越播越冷清,马筱梅后半场万人在线,品牌方直呼佩服

别人直播越播越冷清,马筱梅后半场万人在线,品牌方直呼佩服

喜欢历史的阿繁
2026-08-13 11:33:39
65岁后,提醒中老年:存款别只写自己的名字!聪明人这样存,晚年更省心

65岁后,提醒中老年:存款别只写自己的名字!聪明人这样存,晚年更省心

小谈食刻美食
2026-08-10 08:17:04
刘晓庆私密聊天记录全网疯传,律师:转发的每个人可能都违法了

刘晓庆私密聊天记录全网疯传,律师:转发的每个人可能都违法了

梦想总会变成真
2026-08-13 11:09:39
CCTV5直播,中国女篮PK泰国女篮,赛前三个好消息,宫鲁鸣迎大考

CCTV5直播,中国女篮PK泰国女篮,赛前三个好消息,宫鲁鸣迎大考

体坛小快灵
2026-08-13 08:35:58
穆里尼奥慧眼识珠!皇马挖出绝世瑰宝!18 岁天才横空出世

穆里尼奥慧眼识珠!皇马挖出绝世瑰宝!18 岁天才横空出世

澜归序
2026-08-13 06:45:19
汪峰退出与森林北合伙公司

汪峰退出与森林北合伙公司

经理人杂志
2026-08-12 15:51:39
中美航发差距又扩大?涡扇15推力、油耗和高速性能都比不过XA100

中美航发差距又扩大?涡扇15推力、油耗和高速性能都比不过XA100

阿振观点
2026-08-13 05:38:59
预报大反转!京津冀躲过一劫,暴雨猛砸河南河北

预报大反转!京津冀躲过一劫,暴雨猛砸河南河北

行舟问茶
2026-08-13 07:59:39
欲哭无泪!梁家辉5票落败百花奖,网友:68岁了,160多部电影,5届金像影帝奖,被称为“千面影帝”,却从没拿过百花奖

欲哭无泪!梁家辉5票落败百花奖,网友:68岁了,160多部电影,5届金像影帝奖,被称为“千面影帝”,却从没拿过百花奖

火山詩话
2026-08-11 10:31:37
“不合理,浪费人力”!深圳一网红儿童乐园,被指最凉爽时赶客!官方火速整改

“不合理,浪费人力”!深圳一网红儿童乐园,被指最凉爽时赶客!官方火速整改

南方都市报
2026-08-12 14:41:13
等不了了!哈登团队心态已崩盘,骑士操作让哈登心寒,离队预案已上线!

等不了了!哈登团队心态已崩盘,骑士操作让哈登心寒,离队预案已上线!

兰亭墨未干
2026-08-13 11:47:13
怪不得印度不闹了,雅鲁藏布江水电工程,让“水资源威胁论”失效

怪不得印度不闹了,雅鲁藏布江水电工程,让“水资源威胁论”失效

晓銊就是我
2026-08-12 05:08:54
很多人好奇郭兰英每月退休金多少?今天聊聊网传消息背后真相

很多人好奇郭兰英每月退休金多少?今天聊聊网传消息背后真相

情感大头说说
2026-08-13 00:02:13
电车未必全面接班, 油混车型逐渐遇冷, 短板慢慢暴露出来

电车未必全面接班, 油混车型逐渐遇冷, 短板慢慢暴露出来

沙雕小琳琳
2026-08-13 13:11:33
格格亲爹记恨傻狍子!徐峥被沈腾顶包了!

格格亲爹记恨傻狍子!徐峥被沈腾顶包了!

八卦疯叔
2026-08-13 11:06:18
不是迷信!今日七月初一,“最不能”做的9件事,记得提醒家人

不是迷信!今日七月初一,“最不能”做的9件事,记得提醒家人

匹夫来搞笑
2026-08-13 09:04:50
巴沙尔·阿萨德,被判死刑

巴沙尔·阿萨德,被判死刑

南方都市报
2026-08-11 17:59:32
中央五套直播乒乓球时间表:8月13日CCTV5直播,附上国乒最新赛程

中央五套直播乒乓球时间表:8月13日CCTV5直播,附上国乒最新赛程

林子说事
2026-08-13 10:14:28
赶尽杀绝!赢了18亿还不收手,杜建英杀回杭州,宗馥莉噩梦刚开始

赶尽杀绝!赢了18亿还不收手,杜建英杀回杭州,宗馥莉噩梦刚开始

奇思妙想生活家
2026-08-13 07:32:40
拍完新龙门客栈,梁家辉对张曼玉说:以后除了拍戏,咱俩别联系,这样对你我都好

拍完新龙门客栈,梁家辉对张曼玉说:以后除了拍戏,咱俩别联系,这样对你我都好

草莓解说体育
2026-08-10 16:30:35
2026-08-13 13:56:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1390文章数 79关注度
往期回顾 全部

科技要闻

DeepSeek V4 Pro更新:性价比炸裂 仍需打磨

头条要闻

30多吨价值超百万黑胡椒存冷库一年多"失踪" 警方介入

头条要闻

30多吨价值超百万黑胡椒存冷库一年多"失踪" 警方介入

体育要闻

负债十几亿的联赛,还在疯狂买球星

娱乐要闻

郭德纲魔改红歌被立案!

财经要闻

韩国可能迎来失去的三十年

汽车要闻

试了奇瑞捷豹路虎神行者8,才知道它的i-ATS有多强?

态度原创

游戏
本地
房产
手机
公开课

《大侠立志传:侠道相逢》官宣!8月19日全球上线

本地新闻

黄州一夜,苏轼写给普通人的月光

房产要闻

华润海棠湾·澐麗 | 高光封顶,南法新境启幕新篇

手机要闻

澎湃OS 4 Beta版第一批机型开启招募,小米17、REDMI K90系列

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版