题目
编写一个程序来找到数组中两个数字之和等于目标值的下标。假设每个输入只有一个解,且不能重复使用相同的元素。 实现一个Solution类,其中包含一个方法twoSum
,输入参数为一个整数数组nums和一个目标值target,返回两个数字之和等于目标值的下标。
- 输入描述:1, 2, 3; 3
输出描述: Indices: 0, 1
说明:表示输入整数数组nums=[1,2,3],目标值 target =3 ,打印输出:Indices: 0, 1 - 输入描述:1, 2, 3; 8
输出描述: No two sum solution
说明:抛出异常,打印"No two sum solution"
注意格式:","后有空格
代码
public class Main {
public static int[] twoSum(int[] nums,int target){
int length=nums.length;
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<length;i++){
int remain=target-nums[i];
if(map.containsKey(remain)){
//注意下标顺序
return new int[]{map.get(remain),i};
}
map.put(nums[i],i);
}
//抛出异常
throw new IllegalArgumentException("No two sum solution");
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str=in.nextLine();
//去掉空格,然后按照“,”或者“;”进行分割
String[] s=str.replaceAll(" ","").split(",|;");
int length=s.length;
int target=Integer.parseInt(s[length-1]);
int[] nums=new int[length-1];
for(int i=0;i<length-1;i++){
nums[i]=Integer.parseInt(s[i]);
}
//捕获twoSum中抛出的异常,并输出No two sum solution
try{
int[] res=twoSum(nums,target);
System.out.print("Indices:"+" "+res[0]+", "+res[1]);
}catch(IllegalArgumentException e){
System.out.println("No two sum solution");
}
}
}
split
根据给定的正则表达式的匹配来拆分字符串:
public String[] split(String regex)
正则表达式:
s 表示空格,回车,换行等空白符;
需要使用转义字符,即str.split(“\\s+”),”+“代表匹配多个空格,同样需要使用转义字符的有".“、”+“、”!“等,即str.split(”\\s+|\\!|")。