我想解决以下问题:
给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。
我将下面的数组作为输入-[2,7,11,15],目标为9。
因为nums[0]nums[1]=27=9,所以返回[0,1]。
这是我的密码-
import java.util.Random;
public class TwoSum {
static int[] numbers = new int[] {2, 7, 11, 15};
int[] indices = new int[numbers.length];
public static int[] returnIndices(int target, int[] inputArr) {
int[] indices = new int[2];
int randomOne = new Random().nextInt(inputArr.length);
int randomTwo = new Random().nextInt(inputArr.length);
while(true) {
if(target == inputArr[randomOne] + inputArr[randomTwo]) {
indices[0] = randomOne;
indices[1] = randomTwo;
break;
}
}
System.out.println("done");
return indices;
}
public static void main(String[] args) {
int[] output = returnIndices(9, numbers);
}
}
这是解决我问题的正确方法吗?
我在c#中试过,可能会有帮助。。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
int[] nums = { 2, 7, 11, 15 };
int target = 9;
int[] result= TwoSumNumbers(nums, target);
}
public static int[] TwoSumNumbers(int[] nums, int target)
{
Dictionary<int, int> numsDict = new Dictionary<int, int>();
for (int i = 0; i < nums.Length; i++)
{
int num = nums[i];
if (numsDict.TryGetValue(target - num, out int index))
{
return new[] { index, i };
}
numsDict[num] = i;
}
return null;
}
}
解决这个问题有多种方法:
让我们先举一个例子来看看它的实际应用。我们得到了数组中的arr=[5,2,1,9,7]
元素,如果我们能得到8
,我们将找到两个元素的索引。
如果你仔细观察,你就会知道如果我们对数组中最后三个元素求和,我们将得到8
,这意味着2
和4
将是我们的答案。那么那里的土地会是怎样的呢?让我们一步一步走
>
维护一个相同大小的单独数组,它将在初始设置中保存arr
的索引。
[5, 2, 1, 9, 7] = arr
[0, 1, 2, 3, 4] = index_arr
现在,按递增顺序对arr
进行排序,并对索引\u arr
进行排序,以便初始设置中arr
中的元素索引仍然存在。
[1, 2, 5, 7, 9] = arr
[2, 1, 0, 4, 3] = index_arr
使用下面的伪代码:
low = 0
high = length of arr - 1
while (low < high) {
sum = arr[low] + arr[high]
if (sum == number) {}
print "index_arr[low]" and "index_arr[high]"
break the loop and exit
} else if ( sum < number ) {
low = low + 1
} else {
high = high - 1
}
}
让我们看看psuedo代码的实际应用:
[1, 2, 5, 7, 9] = arr
[2, 1, 0, 4, 3] = index_arr
Iteration # 01
low = 0 and high = 4
sum = arr[0] + arr[4] = 1 + 9 = 10
10 > 8 , means 'else' will be executed high = high - 1 = 4 - 1 = 3
Iteration # 02
low = 0 and high = 3
sum = arr[0] + arr[3] = 1 + 7 = 8
8 == 8 , means first 'if' condiion will execute, and will indices and exit the loop
时间复杂度-O(n)
空间复杂度-O(n)
您可以使用hashmap以以下方式存储第一个数组:
key value(index in array)
2 - 0
7 - 1
11 - 2
15 - 3
接下来获取目标元素9,并开始从索引0遍历给定数组。
索引0处的元素为2--
附加说明:您需要处理以下情况:
arr=[3,2,1,1]target=6(本例中不存在答案,但通过上述方法,当您计算6-3=3时,您会得到索引0作为答案。)
但这可以通过检查(target arr[i]==arr[i])是否返回true来轻松解决。如果返回true,并且hashmap在键arr[i]处存储了两个索引,则将其作为答案返回,否则继续下一个元素。
给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。 例子: 给定nums=,target=6, 因为=24=6 。 解决方案 上面的代码在其他情况下有效,但在本例中无效。 预期结果 输出 例如,我尝试使用不同的数字数组和不同的目标,即使你改变数字的顺序,它也能工作 例子: 新数组:,目标=9, 输出:。 我不明白这个解决方案出了什么问题,我希望有人能解释一下。谢谢
这是一个关于LeetCode的练习。我得到一个例外 第15行的UnboundLocalError。 为什么?如何修复它?
我试着比较两个字符串的字符 String string1=“ABC” 这里举个例子,如果我们一起比较字符串,在索引“1”中的字符串“B”中的索引0中可以找到字符串“A”,所以通过比较字符串,我应该得到一个数字01221,我知道在java中它有,,但我想不出如何实现这一点
嗨,伙计们,你们好吗?=)我是新来的Java,目前,我正在学习数组和循环,目前我真的在与它们作斗争。 我的任务是返回以结尾的数字数组。不要更改其余数字的顺序。我唯一能用的就是for循环。 我的大脑现在有点崩溃了,我不知道该怎么办。 当我返回一个结果时,它以的形式返回。 目前,我在考虑如何将结果排除在for循环之外。С你能帮我找到一种方法,将所有带有9的数字存储在一个新数组中吗?
我有两个数组: 我需要编写一个方法,该方法返回array1中元素的数组,该数组在字符串项中包含array2中的任何项。因此该方法应该返回: 我尝试了,但它只返回array1。我该怎么办?
我想从中得到一个子字符串。 我想要的子字符串是一个数字字符序列。 输入 通常可以是任何字符串,但它们都有一个共同点: 有一个部分以KD-开头 并以数字结尾 数字之后的所有内容都将消失。 在上面的示例中,这个数字将分别为、、。但它可以是任何数字 现在我有一个子字符串,它包含KD之后的所有数字字符--但我希望只有字符串的0815ish部分。 我目前所拥有的 结果是,但我只想要(它可以是任何长度,但不可