大四才开始看算法,是不是已经晚了?算法渣渣的开始
题目是这样的:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
我的代码是这样的:
public class Solution {
public int[] twoSum(int[] nums, int target) {
int sum[]=new int[2];
for(int i=0;i<nums.length;i++){
for(int j=1;j<nums.length;j++){
if(nums[j]+nums[i]==target){
sum[0]=j;
sum[1]=i;
}
}
}
return sum;
}
}
系统说通过了一半的测试,例如[3,3]6输入就会出错
不是很明白,感觉我的答案和其他的也差不多
第二个循环应该是j=i+1吧,要不然会出现[2,3]已经是正确答案了,你的却是[3,2]
因为i=0的时候就已经找到结果了,但是循环没结束;
i=1,又进行了一次循环,这一次没必要,但是改变了之前正确的结果!
修改:找到结果之后跳出外层循环,
outer:for(int i=0;i<nums.length;i++){
for(int j=1;j<nums.length;j++){
if(nums[j]+nums[i]==target){
sum[0]=j;
sum[1]=i;
break outer;
}
}
}
或者直接在
if(nums[j]+nums[i]==target){
sum[0]=j;
sum[1]=i;
i = nums.length;
}
you may not use the same element twice说了不要重复
package com.ljheee.other;
public class Solution {
public int[] twoSum(int[] nums, int target) {
int sum[]=new int[2];
for(int i = 0 ; i<nums.length ; i++){
int temp = target - nums[i];
if(isExist(nums , temp)){
sum[0] = nums[i];
sum[1] = temp;
}
}
return sum;
}
public boolean isExist(int[] nums, int key){
boolean result = false;
for (int i = 0; i < nums.length; i++) {
if(key == nums[i]){
result = true;
break;
}
}
return result;
}
public static void main(String[] args) {
Solution solution = new Solution();
int[] two = solution.twoSum(new int[]{2, 7, 11, 15}, 9);
System.out.println(two[0]);
System.out.println(two[1]);
}
}