LeetCode(Hot100)——1:两数之和
2023-12-13 23:22:34
方法1:暴力求解
- 利用两次for循环来处理, 外循环确定一个数字, 利用内循环不断求和来判断是否两数之和为target,来进行求解。
public class LeetCode1 {
@Test
//测试方法
public void test() {
int [] nums={2,7,11,15};
int target=9;
//调用方法
System.out.println(Arrays.toString(twoSum(nums,target)));
}
//暴力求解
public int[] twoSum(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length;i++){
if(nums[i]+nums[j]==target)
{
//if(i!=j&&nums[i]+nums[j]==target)
//返回一个数组,new一个数组。
return new int[]{i,j};
}
}
}
//定义返回值应该是int类型的数组,所以更合理的解释是返回return new int[0](本身的含义是长度为0的空数组)
return new int[0];
//假设一个方法返回一个数组,如果它返回null,则调用方法必须先判断是否返回null,才能对返回数组进一步处理,而如果返回空数组,则无须null引用检查
//return null;
}
}
暴力求解的时间复杂度是O(n2)
方法2:哈希映射
- 哈希的时间复杂度为O(1),利用哈希容器map降低时间复杂度
- 遍历数组 nums,i 为当前下标,每个值都判断map中是否存在 target-nums[i] 的 key 值
- 如果存在则找到了两个值,如果不存在则将当前的 (nums[i],i) 存入 map中,继续遍历直到找到为止
- 如果最终都没有结果则抛出异常
// 哈希表存储检查过的数字
public int[] twoSum(int[] nums, int target) {
// 创建一个哈希表用于存储检查过的数字
Map<Integer, Integer> map = new HashMap<>();
// 遍历数组
for(int i = 0; i < nums.length; i++) {
// 计算目标值与当前数字的差值
int complement = target - nums[i];
// 检查哈希表中是否包含差值
if(map.containsKey(complement)) {
// 如果存在差值,则返回差值的索引和当前数字的索引
// 如果HashMap中包含target-nums[i],则返回HashMap中target-nums[i]对应的值和i
return new int[] {map.get(complement), i};
}
// 将nums[i]和i放入HashMap中
map.put(nums[i], i);
}
// 如果没有找到,则返回一个长度为0的数组
return new int[0];;
}
文章来源:https://blog.csdn.net/weixin_45177027/article/details/134981938
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!