首页 > 其他分享 >征服leecode第一天

征服leecode第一天

时间:2023-02-20 18:45:37浏览次数:57  
标签:map target 第一天 nums int 征服 leecode new sulution

准备开始征服leecode了
目前的想法是做 leecode hot100

  1. 两数之和
    两数之和
    在最开始拿到的时候想排序,然后遍历,得到结果,但是这里排序会改变下标的值,于是失败。
    代码如下
public int[] twoSum(int[] nums, int target) {
        Arrays.sort(nums);
        int[] sulution = new int[2];
        for (int i = 0; i < nums.length-1; i++) {
            int num = nums[i];
            for (int j = i+1; j < nums.length; j++) {
                int numLast = nums[j];
                if(num + numLast == target){
                    sulution[0] = i;
                    sulution[1] = j;
                }
                if (numLast +num > target)
                    break;
            }
        }
        return sulution;
    }

然后第二种想法就是暴力穷举,两个for循环,当然,成功,但是效率低下

 public int[] twoSum(int[] nums, int target) {
        int[] sulution = new int[2];
        for (int i = 0; i < nums.length-1; i++) {
            int num = nums[i];
            for (int j = i+1; j < nums.length; j++) {
                if (num + nums[j] == target){
                    sulution[0]=i;
                    sulution[1]=j;
                    return sulution;
                }
            }
        }
        return new int[2]{};
    }

然后没啥想法了 看了题解之后可以使用map,于是看完后实现,效率确实高了很多

public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> hashmap = new HashMap<Integer,Integer>();
        for (int i = 0; i < nums.length; i++) {
            if (hashmap.containsKey(target-nums[i]))
                return new int[]{i,hashmap.get(target-nums[i])};
            //key:value 数字:下标
            hashmap.put(nums[i],i);
        }
        return new int[]{};
    }

在写这个的时候突然觉得可以采用排序加map来实现一次遍历,这样的话需要用map来存数字和下标,然后将数字和下标一起排序,但是好像这样的话效率肯定是没有直接使用map好的,因为这样写首先还是要存到map里面再找一次,不如直接使用map来得快。

标签:map,target,第一天,nums,int,征服,leecode,new,sulution
From: https://www.cnblogs.com/Dumbo/p/17138312.html

相关文章

  • 【LeeCode】28. 找出字符串中第一个匹配项的下标
    【题目描述】给你两个字符串 ​​haystack​​ 和 ​​needle​​ ,请你在 ​​haystack​​ 字符串中找出 ​​needle​​ 字符串的第一个匹配项的下标(下标从0开......
  • 【LeeCode】剑指 Offer 58 - II. 左旋转字符串
    【题目描述】字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回......
  • 【LeeCode】151. 反转字符串中的单词
    【题目描述】给你一个字符串 ​​s​​ ,请你反转字符串中 单词 的顺序。单词 是由非空格字符组成的字符串。​​s​​ 中使用至少一个空格将字符串中的 单词 分隔开......
  • 【LeeCode】344. 反转字符串
    【题目描述】编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 ​​s​​ 的形式给出。不要给另外的数组分配额外的空间,你必须​​原地​​修改输入数......
  • 【LeeCode】135. 分发糖果 -- todo
    【题目描述】​​n​​​ 个孩子站成一排。给你一个整数数组 ​​ratings​​ 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 ​​1​......
  • 【LeeCode】二叉树理论
    二叉树分类没有数值满⼆叉树如果⼀棵⼆叉树只有度为0的结点和度为2的结点,并且度为0的结点在同⼀层上,则这棵⼆叉树为满⼆叉树​满⼆叉树,也可以说深度为k,有2^k-1个节点的⼆叉......
  • 【LeeCode】406. 根据身高重建队列
    【题目描述】假设有打乱顺序的一群人站成一个队列,数组 ​​people​​​ 表示队列中一些人的属性(不一定按顺序)。每个 ​​people[i]=[hi,ki]​​​ 表示第 ​​i​......
  • 【LeeCode】300. 最长递增子序列
    【题目描述】给你一个整数数组 ​​nums​​ ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如......
  • 【LeeCode】674. 最长连续递增序列
    【题目描述】给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 ​​l​​ 和 ​​r​​(​​l<r​​)确......
  • 【LeeCode】718. 最长重复子数组
    【题目描述】给两个整数数组 ​​nums1​​ 和 ​​nums2​​ 两个数组中 公共的 、长度最长的子数组的长度 。​​​https://leetcode.cn/problems/maximum-length-......