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

2026-07-11:构造奇偶一致的数组Ⅱ。用go语言,给定一个长度为 n 的整数数组 nums1,所有元素互不相同。需要构造一个同样长度为 n 的数组

0
分享至

2026-07-11:构造奇偶一致的数组Ⅱ。用go语言,给定一个长度为 n 的整数数组 nums1,所有元素互不相同。需要构造一个同样长度为 n 的数组 nums2,使得 nums2 的每个元素都必须是奇数或者都必须是偶数(只能二选一)。对每个下标 i,nums2[i] 只能用两种方式之一生成:要么直接取 nums2[i] 等于 nums1[i];要么选择某个不同下标 j,把 nums2[i] 设为 nums1[i] 减去 nums1[j],并且要求这个差值为正(即 nums1[i] - nums1[j] >= 1)。如果能找到某种构造使得 nums2 全为奇数或全为偶数则返回 true,否则返回 false。

1 <= n == nums1.length <= 100000。

1 <= nums1[i] <= 1000000000。

nums1 中的所有整数互不相同。

输入: nums1 = [1,4,7]。

输出: true。

解释:

设置 nums2[0] = nums1[0] = 1。

设置 nums2[1] = nums1[1] - nums1[0] = 4 - 1 = 3。

设置 nums2[2] = nums1[2] = 7。

nums2 = [1, 3, 7],所有元素均为奇数。因此答案为 true。

题目来自力扣3876。

一、先拆解题目核心规则与奇偶数学基础 1. nums2 元素生成规则(每个位置二选一)

对任意下标 i:

  1. 1. 方案A:nums2[i] = nums1[i],直接复用原数;

  2. 2. 方案B:找另一个下标 j(j≠i),满足nums1[i] - nums1[j] ≥ 1,令nums2[i] = nums1[i] - nums1[j]
    最终要求整个 nums2全部奇数 或 全部偶数,满足其一就返回 true。

2. 奇偶加减基础规律(解题核心)

设 a、b 为整数:

  1. 1. 奇数 − 奇数 = 偶数

  2. 2. 偶数 − 偶数 = 偶数

  3. 3. 奇数 − 偶数 = 奇数

  4. 4. 偶数 − 奇数 = 奇数
    结论:两数做差,奇偶性由两数是否相同决定;相同奇偶得偶,不同奇偶得奇

3. 目标拆解:只分两种可行目标,满足任一即true

目标1:构造全奇数 nums2
目标2:构造全偶数 nums2
只要其中一种目标存在可行构造,答案就是 true。

二、分步推导代码的完整逻辑(对应 uniformArray 函数思路) 步骤1:遍历数组,记录全局最小奇数、全局最小偶数

  1. 1. 初始化两个极值变量:mn[0]存最小偶数、mn[1]存最小奇数,初始值设为系统最大整数(代表当前还没找到对应类型数字);

  2. 2. 逐个遍历 nums1 中每个数字 x:

  • • 用x & 1判断奇偶:结果0=偶数、结果1=奇数;

  • • 把当前类型的最小值更新:如果x比已存的同类型最小值更小,就替换;

3. 遍历结束后得到两个关键值:

  • mn[0]:数组里所有偶数的最小值;若无偶数,保持最大值;

  • mn[1]:数组里所有奇数的最小值;若无奇数,保持最大值。

步骤2:分类讨论数组本身的奇偶构成,判断是否能构造合法nums2 情况A:数组只有偶数(mn[1] = 极大值,没有奇数)

此时直接满足函数返回条件mn[1] == math.MaxInt,直接返回 true。
原理:每个位置i都选择方案A(直接取原偶数),nums2 全偶数,天然合法。

情况B:数组只有奇数(mn[0] = 极大值,没有偶数)

此时mn[0] > mn[1]恒成立(极大值一定大于奇数最小值),满足第二个判断条件,返回 true。
原理:每个位置i直接取原奇数,nums2 全奇数,天然合法。

情况C:数组同时存在奇数、偶数(mn[0]、mn[1]都不是极大值)

此时判断条件:最小偶数 > 最小奇数(mn[0] > mn[1]),分两种子情况:

子情况C1:最小偶数 > 最小奇数 → 返回true

以示例[1,4,7]举例:
最小奇数 mn[1]=1,最小偶数 mn[0]=4,4>1,符合条件。
推导为什么能构造全奇数nums2:

  1. 1. 全局最小数字是奇数(最小奇数),记为 min_odd;

  2. 2. 对数组里任意数字 x,分两类处理:

  • • 若x本身是奇数:直接方案A,nums2[i]=x,天然奇数;

  • • 若x是偶数:x 一定大于 min_odd(全局最小数是奇数,所有偶数都比它大),满足x - min_odd ≥ 1;根据奇偶规律,偶数−奇数=奇数,因此选方案B,用j对应min_odd的下标,差值就是奇数;

3. 所有位置都能生成奇数,nums2全奇数,符合要求。

子情况C2:最小偶数 < 最小奇数 → 返回false

此时全局最小数字是偶数 min_even,数组同时有奇数、偶数,无法构造全奇数/全偶数数组:

  1. 1. 尝试构造全奇数nums2:
    数组里存在奇数,奇数只能通过两种方式变成奇数:①直接保留奇数;②奇数−偶数。
    但全局最小数是偶数 min_even,所有奇数都大于 min_even,奇数减min_even确实是奇数;但数组里的偶数无法变成奇数:偶数要得到奇数只能 偶数−奇数,但所有奇数都比min_even大,而当前最小偶数比所有奇数更小,不存在任何奇数满足「偶数−奇数≥1」,偶数位置无法生成奇数,全奇数方案作废。

  2. 2. 尝试构造全偶数nums2:
    奇数想要生成偶数,只能用「奇数−奇数」,但全局最小数字是偶数,不存在比奇数更小的奇数,任意奇数找不到j满足差值为正且同为奇数;奇数位置无法生成偶数,全偶数方案作废。
    两种目标都无法实现,最终返回 false。

步骤3:整合判断逻辑,统一返回结果

函数判断式mn[1] == math.MaxInt || mn[0] > mn[1]等价于:
要么数组无奇数(全偶数直接合法),要么最小偶数大于最小奇数(可以构造全奇数数组),满足任意一条就返回true,其余情况返回false。

三、示例 [1,4,7] 完整演算过程

  1. 1. 遍历数组提取奇偶最小值:

  • • x=1,奇数,mn[1]更新为1;

  • • x=4,偶数,mn[0]更新为4;

  • • x=7,奇数,mn[1]仍为1;

2. 状态:mn[0]=4,mn[1]=1,两种数字都存在;

3. 判断 4 > 1,条件成立,返回true;

4. 实操构造nums2:

  • • 下标0数字1(奇数):直接保留,得1;

  • • 下标1数字4(偶数):减去全局最小奇数1,4-1=3(奇数);

  • • 下标2数字7(奇数):直接保留,得7;
    nums2=[1,3,7],全部奇数,符合题目要求。

四、时间复杂度、额外空间复杂度分析 1. 时间复杂度
  • • 核心操作:单次完整遍历数组 nums1,数组长度为 n;

  • • 遍历内每个元素仅做奇偶判断、一次最小值比较,均为 O(1) 常量操作;

  • • 无嵌套循环、无排序、无哈希、无额外多次遍历;
    总时间复杂度:O(n),n 为数组长度,上限1e5,效率满足题目数据范围。

2. 额外空间复杂度

仅开辟固定长度数组mn [2]int,只存储两个整数,空间大小与输入数组长度 n 无关,属于常量空间;
没有开辟动态切片、哈希表、辅助数组等随n增长的空间;
总额外空间复杂度:O(1)(常数空间)。

Go完整代码如下:

package main

import (
"fmt"
"math"
)

func uniformArray(nums1 []int)bool {
// 计算最小偶数、最小奇数
mn := [2]int{math.MaxInt, math.MaxInt}
for _, x := range nums1 {
mn[x&1] = min(mn[x&1], x) // &1 比 %2 好,nums1 有负数也适用
}

// 只有偶数,或者偶数 >= 最小的偶数 > 最小的奇数
// 只有奇数的情况蕴含在 mn[0] > mn[1] 中
return mn[1] == math.MaxInt || mn[0] > mn[1]
}

func main() {
nums1 := []int{1, 4, 7}
result := uniformArray(nums1)
fmt.Println(result)
}

Python完整代码如下:

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

import math
from typing import List

def uniform_array(nums: List[int]) -> bool:
# 计算最小偶数、最小奇数
mn = [math.inf, math.inf]
for x in nums:
# & 1 比 % 2 更好,nums 有负数也适用
mn[x & 1] = min(mn[x & 1], x)
# 只有偶数,或者偶数 >= 最小的偶数 > 最小的奇数
# 只有奇数的情况蕴含在 mn[0] > mn[1] 中
return mn[1] == math.inf or mn[0] > mn[1]

def main():
nums = [1, 4, 7]
result = uniform_array(nums)
print(result)

if __name__ == "__main__":
main()

C++完整代码如下:

  





bool uniformArray(const std::vector& nums) {
// 计算最小偶数、最小奇数
int mn[2] = {INT_MAX, INT_MAX};
for (int x : nums) {
// & 1 比 % 2 更好,nums 有负数也适用
mn[x & 1] = std::min(mn[x & 1], x);
}

// 只有偶数,或者偶数 >= 最小的偶数 > 最小的奇数
// 只有奇数的情况蕴含在 mn[0] > mn[1] 中
return mn[1] == INT_MAX || mn[0] > mn[1];
}

int main() {
std::vector nums = {1, 4, 7};
bool result = uniformArray(nums);
std::cout << std::boolalpha << result << std::endl;
return0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的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.

相关推荐
热点推荐
“竹知了”事件再起波澜:网友扒出竹知了是台湾玩具,华为官方声明下架后又恢复

“竹知了”事件再起波澜:网友扒出竹知了是台湾玩具,华为官方声明下架后又恢复

Mr王的饭后茶
2026-08-07 17:02:05
最高领袖给总统下了“最后警告”?

最高领袖给总统下了“最后警告”?

中国新闻周刊
2026-08-07 20:47:04
宜宾地震已致多人死伤,现场视频曝光,有房屋坍塌墙面断裂

宜宾地震已致多人死伤,现场视频曝光,有房屋坍塌墙面断裂

Mr王的饭后茶
2026-08-07 21:15:51
约4.2米长、30公斤重!广西一农户家惊现缅甸蟒,吞食十余只鸡!消防十几秒制服:无毒但具有强攻击性

约4.2米长、30公斤重!广西一农户家惊现缅甸蟒,吞食十余只鸡!消防十几秒制服:无毒但具有强攻击性

环球网资讯
2026-08-08 07:13:17
河南财政拿出数千万补贴为三支一扶作弊案买单,14余万考生重考刷新记录

河南财政拿出数千万补贴为三支一扶作弊案买单,14余万考生重考刷新记录

Mr王的饭后茶
2026-08-07 22:38:09
8死30伤,泰国惊爆惨烈校园枪击:14岁学霸杀死爷爷奶奶后前往学校,行凶原因竟是学习压力过大

8死30伤,泰国惊爆惨烈校园枪击:14岁学霸杀死爷爷奶奶后前往学校,行凶原因竟是学习压力过大

悦居英国
2026-08-08 01:22:56
震惊!上海某演唱会票价最高1680元一票难求,网友:这一刻,“全女经济”具象化了

震惊!上海某演唱会票价最高1680元一票难求,网友:这一刻,“全女经济”具象化了

火山詩话
2026-08-07 16:01:22
中国女篮3分险胜世界第八,张子宇24+11内线无解,杨舒予12+6王思雨7+5

中国女篮3分险胜世界第八,张子宇24+11内线无解,杨舒予12+6王思雨7+5

中国篮坛快讯
2026-08-07 21:23:11
拒绝4年2.75亿!4年2.72亿遭拒!NBA两大天才中锋遇冷,该离开了

拒绝4年2.75亿!4年2.72亿遭拒!NBA两大天才中锋遇冷,该离开了

老侃侃球
2026-08-07 10:56:49
震惊!网传400多部电视剧拍完即封存,大多都是大明星主演,上亿成本打水漂,为何迟迟播不了

震惊!网传400多部电视剧拍完即封存,大多都是大明星主演,上亿成本打水漂,为何迟迟播不了

火山詩话
2026-08-07 06:59:41
梅德韦杰夫:在回顾广岛和长崎遭核爆事件时,日本首相或其他任何日本官员竟然一次都没有提当年是谁炸的,真是耻辱

梅德韦杰夫:在回顾广岛和长崎遭核爆事件时,日本首相或其他任何日本官员竟然一次都没有提当年是谁炸的,真是耻辱

极目新闻
2026-08-07 11:44:42
8月份三天“回血”46万!网红“峰哥”晒账户收益:近三个月累计收益超10万元,终于实现了账户转正!7月份曾自曝年内亏损近200万元

8月份三天“回血”46万!网红“峰哥”晒账户收益:近三个月累计收益超10万元,终于实现了账户转正!7月份曾自曝年内亏损近200万元

金融界
2026-08-07 14:00:26
“拖延”5年的强奸案:已婚男被指强奸18岁女子时隔5年刑拘,一审判5年双方均不服

“拖延”5年的强奸案:已婚男被指强奸18岁女子时隔5年刑拘,一审判5年双方均不服

红星新闻
2026-08-07 18:55:24
王兴兴:希望投资者是认同公司价值才买我们的股票,而不是为了炒作

王兴兴:希望投资者是认同公司价值才买我们的股票,而不是为了炒作

澎湃新闻
2026-08-07 23:58:07
巧杀!乌克兰二手F-16击落Su-35,俄机被诱深入中计,乌体系化作战完胜

巧杀!乌克兰二手F-16击落Su-35,俄机被诱深入中计,乌体系化作战完胜

网易新闻出品
2026-08-06 15:46:03
出战40分钟砍0分4失误!女篮两大混子被揪出:宫鲁鸣看走眼了?

出战40分钟砍0分4失误!女篮两大混子被揪出:宫鲁鸣看走眼了?

篮球快餐车
2026-08-08 03:02:05
点球大战险胜!阿森纳总分6-5淘汰上海队,进决赛再战U17国足争冠

点球大战险胜!阿森纳总分6-5淘汰上海队,进决赛再战U17国足争冠

我爱英超
2026-08-07 21:56:34
28岁波兰名将辱华:宁波是贫民窟 中国不如日本 网友:秒杀华沙

28岁波兰名将辱华:宁波是贫民窟 中国不如日本 网友:秒杀华沙

念洲
2026-08-07 19:36:57
近期私家车肇事导致的群死群伤事故多发 公安部交管局发布提示

近期私家车肇事导致的群死群伤事故多发 公安部交管局发布提示

新京报
2026-08-07 10:51:05
万万没想到,湖北首富已被关进看守所,涉案罪名简直让人大跌眼镜

万万没想到,湖北首富已被关进看守所,涉案罪名简直让人大跌眼镜

离离言几许
2026-08-07 16:04:10
2026-08-08 08:52:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1380文章数 78关注度
往期回顾 全部

科技要闻

突然涨价,"只收电费钱"的梁文锋,变了吗

头条要闻

超360个问题 投资者涌进宇树交流会提问王兴兴

头条要闻

超360个问题 投资者涌进宇树交流会提问王兴兴

体育要闻

去年信誓旦旦3000万 今年NBA查无此人

娱乐要闻

周也热恋结束,六个字暴露单身状态

财经要闻

一枚“回旋镖”,击中王思聪

汽车要闻

越7全球首秀 传祺开始进攻方盒子越野

态度原创

亲子
手机
房产
教育
数码

亲子要闻

这可是你自己说的哟

手机要闻

荣耀MagicOS 10 8月更新第二批推送:覆盖Magic7系列等多款机型

房产要闻

单日狂卖35亿!两大央企重仓,三亚土拍又爆了!

教育要闻

初中数学竞赛题,创新性很强

数码要闻

三星发布首款搭载DeepPix技术的ISOCELL HPC图像传感器

无障碍浏览 进入关怀版