首页 > 试题广场 >

两数之和

[编程题]两数之和
  • 热度指数:94 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
示例1

输入

[2, 7, 11, 15],9

输出

[0,1]
这** 输入输出 我觉得这道题不是考我两数之和 是考我怎么解析[2, 7, 11, 15],9 这个输入
编辑于 2023-03-16 22:02:44 回复(1)
牛客相比lc太难用了,一个输入解析就恶心的不行,编辑框也太小了,写了一个python3 o(n)版本

import sys

def parse_input(input_str):
    input_arr = []
    target = 0
    s = input_str.split('],')
    s0 = s[0].replace('[', '').replace(']', '').split(',')
    for item in s0:
        input_arr.append(int(item))
    target = int(s[1])
    return input_arr, target

for line in sys.stdin:
    input_arr, target = parse_input(line)

    # 构建索引
    input_index = {}
    index = 0
    for item in input_arr:
        input_index[item] = index
        index = index + 1

    # 计算结果
    index = 0
    result = []
    for item in input_arr:
        sub_target = target - item
        if sub_target in input_index:
            print(f'[{index},{input_index[sub_target]}]')
            break
        index = index + 1


编辑于 2023-04-15 17:44:25 回复(0)
import sys

msg = input()
res = int(msg.split(',')[-1])
list_info = eval(",".join(msg.split(',')[:-1]))
list_info = list(map(lambda x:x if x < res else 0,list_info))
r = ""
for i in range(len(list_info)):
    for j in range(i+1,len(list_info)):
        if list_info[i] + list_info[j] == res:
            r = "[%d,%d]" %(i,j)
            break
print(r)




编辑于 2023-04-04 09:56:46 回复(0)
class Solution{
    public:
        vector<int> twoSum(vector<int>& nums, int target){
            unordered_map<int, int> tempMap;
            for(int i = 0; i < nums.size(); i++){
                auto it = tempMap.find(target - nums[i]);
                if(it != tempMap.end()){
                    return {it->second, i};
                }
                tempMap.insert(pair<int,int>(nums[i], i));
            }
            return {};
        }
};
发表于 2023-01-19 15:20:20 回复(0)
用c写,时间复杂度为O(N)的代码有吗
发表于 2023-01-07 15:15:36 回复(0)
牛客网这个**模式,是用来练习算法还是练习各种输入输出,字符串分解
明明可以选择Java,提交的时候又不支持Java。他们的QA是怎么测试的

编辑于 2022-12-26 13:44:10 回复(0)
    public static void main1(int[] a, int b){
        for (int i=0; i<a.length; i++){
            for (int j=i+1;j<a.length;j++) {
                if(a[i]+a[j]==b){
                    System.out.print("["+i+","+j+"]");
                }
            }
        }
    }
这个对不对呀 直接双层for
发表于 2022-07-09 00:52:21 回复(0)
为啥不支持Java语言?
    public int[] GetIndex(int[] nums, int target){
        int border = nums.length;
        for (int i = 0; i < border - 1; i ++){
            for (int j = i + 1; j < border; j ++){
                if (nums[i] > target || nums[j] > target){
                    continue;
                }
                if (nums[i] + nums[j] == target)return new int[]{i, j};
            }
        }
    }


发表于 2022-06-02 12:03:56 回复(0)

#include <stdio.h>

void find_index(int nums[], int len, int val, int out[])
{
    int i = 0;
    int j = 0;
    for (i = 0; i<len; i++)
    {
        for(j = i+1; j<len; j++)
        {
            if (val == nums[i]+nums[j])
            {
                out[0] = i;
                out[1] = j;
                break;
            }
        }
    }
}   

int main()
{
    int nums[4] = {1,2,3,4};
    int out[2]={0};
    int val = 3;
    find_index(nums, 4, val, out);
    printf("[%d,%d]\n", out[0], out[1]);
    
    return 0;
}

发表于 2021-01-12 09:42:50 回复(0)
#include<stdio.h> int main() {     int nums[] = {2, 7, 11, 15};     int n = 4;     int target, i, j;     int result[] = {-1, -1};          printf("nums=[%d, %d, %d, %d]\n", nums[0], nums[1], nums[2], nums[3]);     printf("请输入目标:");          scanf("%d", &target);          for(i = 0; i < n - 1; i++){         for(j = i + 1; j < n; j++){             if(nums[i] + nums[j] == target){                 result[0] = i;                 result[1] = j;             }         }     }          if(result[0] != -1){         printf("nums[%d] + nums[%d] = %d", result[0], result[1], target);     }else{         printf("抱歉,nums 中没有两个元素和为 %d ", target);     }          return 0; }
发表于 2021-01-11 19:16:52 回复(0)
public class Main{
public static void main(String[] args){
    int[]nums={2,7,11,15};
    int target=9;
for(int i=0;i<nums.length-1;i++){
    for(int j=i+1;j<nums.length;j++){
        if(nums[i]+nums[j]==target){
            System.out.println("["+i+","+j+"]");
            break;
        }
    }
}
}
}

发表于 2021-01-11 17:56:10 回复(0)
01背包的变形
发表于 2021-01-09 14:43:36 回复(1)