思路
单层循环枚举右侧的数num[j] ,这样目标就变成了,在下标[0,j−1]这个区域寻找一个数,使得其等于target−num[j]。

从上图不难发现,j 往右枚举的过程中,区域是有前缀连续性的。每一个区域是前一个区域多一个元素,也就是图中每一组中带⭐的元素。
现有一个整数数组 nums 和一个整数 target。请你在数组中找到两个不同的下标 i 与 j,使得 numsi+numsj=target,并输出这两个下标。
每个测试数据都保证恰好存在一个答案,因此同一个下标不会被重复使用。两个下标的输出顺序可以任意。
约束条件:
输入共两行。 第一行包含两个整数 n 和 target,分别表示数组 nums 的长度和需要凑成的目标值。 第二行包含 n 个整数 nums0,nums1,…,numsn−1,相邻两个整数之间用一个空格分隔。
输出一行两个整数,用空格分隔,表示满足 numsi+numsj=target 的两个数组下标。
输入
5 8
1 6 -3 4 7
输出
0 4
说明
在数组 nums 中,nums0=1,nums4=7。
两者相加:1+7=8,正好等于目标值 8。
因此选择下标 0 和 4,输出 0 4。
输入
4 6
3 2 3 1
输出
0 2
说明
数组中有两个值为 3 的元素,分别位于下标 0 和下标 2。
它们相加:3+3=6,正好等于目标值 6。
虽然两个元素值相同,但题目要求的是两个不同的下标,因此输出 0 2。
输入
2 -1
-1 0
输出
0 1
说明
这是最小长度 n=2 的情况。
数组元素为 nums0=−1,nums1=0。
两者相加:−1+0=−1,正好等于目标值 -1。
因此下标为 0 和 1。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册