【临窗旋墨-leetcode】0001-两数之和-[简单]

文章来源原创   作者:临窗旋墨   发布时间:2020-12-25   阅读:704   标签:leetcode,算法

[toc]

[临窗旋墨-leetcode]0001-两数之和-[简单]

标签:hash

0001-两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

题解:

1 暴力循环

没有什么是暴力循环不能解决的,如果有就多循环几次。

这一题确实简单,没什么好说的,代码如下,简单明了。

  1. public static int[] twoSum(int[] nums, int target) {
  2. for (int i = 0; i < nums.length; i++) {
  3. for (int j = 0; j < nums.length; j++) {
  4. if (i != j && nums[i] + nums[j] == target) {
  5. return new int[]{i, j};
  6. }
  7. }
  8. }
  9. return null;
  10. }
执行结果:

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

内存消耗:38.5 MB, 在所有 Java 提交中击败了80.76%的用户

02利用HashMap

暴力循环确实有点暴力了,是不是可以考虑使尽量减少循环次数,比如在遍历的时候同时把数据记录到Map,同时只要在Map里找到那个和当前数和等于target的数字(target-cur)呢?

  1. //利用map
  2. public static int[] twoSum(int[] nums, int target) {
  3. // 数字--> 索引
  4. Map<Integer, Integer> map = new HashMap<>();
  5. for (int i = 0; i < nums.length; i++) {
  6. if (map.containsKey(target - nums[i])) {
  7. return new int[]{map.get(target - nums[i]), i};
  8. }
  9. map.put(nums[i], i);
  10. }
  11. return null;
  12. }
执行结果

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

内存消耗:38.5 MB, 在所有 Java 提交中击败了82.93%的用户

这一题比较简单,没什么可多说的,从2020年10月底,到现在12月底,刚好快两个月了,陆续已经刷了60多道题目。从刚开始的完完全全的小白,到现在对于一些常见的题目已经可以比较顺畅的写出来了,故开始把力扣上的题目按序记录下来,聊以自勉,望为时未晚。

Git地址:https://gitee.com/lcxm/basics/tree/master/docs/leetcode

文章来源:临窗旋墨的博客,转载望注明出处。

2020年12月25日


发表评论

目录