近期在刷leetcod额,就当是写笔记吧,把解题思路和过程记录一下
一.暴力循环解题
直接双重循环
public static void test(int[] a,int target)
{
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a.length;j++)
{
int a1=0;
if(i!=j)
{
int b=a[i]+a[j];
if(b==target)
{
System.out.print("["+i+","+j+"]");
a1++;
System.exit(0);
}
}
if(i==a.length-1&&j==a.length-1&&a1==0)
{
System.out.print("没有符合条件的数");
}
}
}
}
时间复杂度为O(n2),这是一种很常见的方法,不过时间消耗过长,不推荐。
二.利用Map解题
Map有一个containsKey方法检查是否存在该key值
public int[] twoSum(int[] nums, int target) {
int[] sum = new int[2];
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(target-nums[i])){
return new int[] {map.get(target-nums[i]),i};
}
map.put(nums[i],i);
}
throw new IllegalArgumentException("无结果");
}
这样时间复杂度就降为O(n),是不是很简单,大家多尝试一下,就会了。