g***j 发帖数: 1275 | 1 发现题目的要求改了
1 要求返回的是index,这就是说不能排序,排序index就打乱了吧?
2 输入的数组中的数会有重复,这就是说不能用hash?
是这样的么?还是我想复杂了? |
r*******k 发帖数: 1423 | 2 排序把index记下来不就可以了?
【在 g***j 的大作中提到】 : 发现题目的要求改了 : 1 要求返回的是index,这就是说不能排序,排序index就打乱了吧? : 2 输入的数组中的数会有重复,这就是说不能用hash? : 是这样的么?还是我想复杂了?
|
g***j 发帖数: 1275 | 3 怎么最快速的记住?
重新弄一个
struct entry {
int val;
int index;
}
然后排序这个?
【在 r*******k 的大作中提到】 : 排序把index记下来不就可以了?
|
r*******k 发帖数: 1423 | 4 不是不可以啊
【在 g***j 的大作中提到】 : 怎么最快速的记住? : 重新弄一个 : struct entry { : int val; : int index; : } : 然后排序这个?
|
R*****i 发帖数: 2126 | 5 感觉排序就傻了,应该是扫描这个数组,同时在hashtable里找余值,找到就return
index, 找不到就把这个数和index放入hashtable里。这个题不care重复值的,找到就行
。 |
j*****8 发帖数: 3635 | 6 或者用一个index数组,swap value数组的同时也swap这个index数组就行
【在 g***j 的大作中提到】 : 怎么最快速的记住? : 重新弄一个 : struct entry { : int val; : int index; : } : 然后排序这个?
|
r*******k 发帖数: 1423 | 7 果然,赞
public class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] res = new int[2];
HashMap scannedList = new HashMap
>();
for(int i = 0; i
int tmp = numbers[i];
if (scannedList.get(target - tmp)!=null){
res[0] = scannedList.get(target - tmp);
res[1] = i+1;
} else {
scannedList.put(numbers[i], i+1);
break;
}
}
return res;
}
}
就行
【在 R*****i 的大作中提到】 : 感觉排序就傻了,应该是扫描这个数组,同时在hashtable里找余值,找到就return : index, 找不到就把这个数和index放入hashtable里。这个题不care重复值的,找到就行 : 。
|
R*****i 发帖数: 2126 | 8 这个是C#版本
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TwoSum
{
class Program
{
static void Main(string[] args)
{
int[] numbers = new int[] { 1, 2, 10, 11, 3, 7, 11, 15 };
int[] li = twoSum(numbers, 9);
if (li != null && li.Length > 1)
{
Console.WriteLine("index1 = {0}, index2 = {1}", li[0], li[1]
);
}
}
static int[] twoSum(int[] numbers, int target)
{
Dictionary dict = new Dictionary();
for (int i = 0; i < numbers.Length; i++)
{
int rem = target - numbers[i];
if (dict.ContainsKey(rem))
{
return new int[2] { dict[rem], i+1 };
}
else
{
dict[numbers[i]] = i+1;
}
}
return null;
}
}
} |
c******y 发帖数: 174 | 9
Integer
刚lc测试通不过,发现break应该在if里 不是在else里
【在 r*******k 的大作中提到】 : 果然,赞 : public class Solution { : public int[] twoSum(int[] numbers, int target) { : int[] res = new int[2]; : HashMap scannedList = new HashMap: >(); : for(int i = 0; i: int tmp = numbers[i]; : if (scannedList.get(target - tmp)!=null){ : res[0] = scannedList.get(target - tmp);
|
g***j 发帖数: 1275 | 10 为啥不care重复的
比如 0 0 0 0 sum 是 0
你的算法返回哪个?
就行
【在 R*****i 的大作中提到】 : 感觉排序就傻了,应该是扫描这个数组,同时在hashtable里找余值,找到就return : index, 找不到就把这个数和index放入hashtable里。这个题不care重复值的,找到就行 : 。
|
r*******k 发帖数: 1423 | 11 题目的要求应该是返回一个【0,0】
而不是一堆【0,0】
【在 g***j 的大作中提到】 : 为啥不care重复的 : 比如 0 0 0 0 sum 是 0 : 你的算法返回哪个? : : 就行
|
g***j 发帖数: 1275 | 12 题目要求返回的是index 而不是数字本身
【在 r*******k 的大作中提到】 : 题目的要求应该是返回一个【0,0】 : 而不是一堆【0,0】
|