先来两道简单的:
给定⼀个数组和⼀个⽬标和,从数组中找两个数字相加等于⽬标和,输出这两个数字的下标。
解法⼀
暴力解法,两重循环,遍历所有情况看相加是否等于⽬标和,如果符合直接输出。
时间复杂度:两层 for 循环,O(n²)
空间复杂度:O(1)
// 基本暴力解法,通过创建数组将符合条件的i和放入其中再输出。
public int[] twoSum1(int[] nums, int target) {
int[] ans = new int[2] ;
for (int i = 0; i < nums.length - 1; i++)
for (int j = 0; j < nums.length; j++)
if (nums[i] + nums[j] == target ){
ans[0] = i ;
ans[j] = j ;
// 时间复杂度:两层 for 循环,O(n²)
//空间复杂度:O(1)
}
return ans;
}
解法⼆
把第二个for循环更换一个思路: