• LeetCode算法一题型一以及解答。


    题目:

      给定一个整数数列,找出其中和为特定值的那两个数。

      你可以假设每个输入都只会有一种答案,同样的元素不能被重用。

    分析:

    普遍方法是直接遍历两遍数组,第一遍用target-nums[i],第二遍找nums数组中是否存在target-nums[i]这个数字,找到就返回两个数字组成的数组,这个方法时间复杂度比较大为O(n²)

     

    class Solution {

        public int[] twoSum(int[] nums, int target) {

        int[] result = new int[2];

            for (int i = 0; i < nums.length; i++) { 

                int v = target - nums[i]; 

                for (int j = 0; j < nums.length; j++) { 

                    if (nums[j] == v && j != i){ 

                        result[0] = i; 

                        result[1] = j; 

                        return result; 

                    } 

                } 

            } 

        return result;

        }

    }

     还有可以用哈希表先把数组中的数字和对应的下标存储一遍,即数字作为键,下标作为值,存储,当遍历数组的时候用target-nums[i],得到差k,然后在map中找是否存在 k,找到即返回k所对应的value,也就是所对应的数组下标。这样时间复杂度就为O(n+l),快了好多

       //哈希表存储查找 

        class Solution { 

            public int[] twoSum(int[] nums, int target) { 

                int[] result = new int[2]; 

                Map<Integer,Integer> map = new HashMap<>(); 

                for (int i = 0; i < nums.length; i++) 

                    map.put(nums[i],i); 

         

                for (int i = 0; i < nums.length; i++) { 

                    int v = target - nums[i]; 

                    if (map.containsKey(v) && i != map.get(v)){ 

                        result[0] = i; 

                        result[1] = map.get(v); 

                        return result; 

                    } 

                } 

                return result; 

            } 

    }

    人真是一种有趣的生物。
  • 相关阅读:
    根分区/tmp满了,卸载home添加给根分区
    Docker容器技术教程
    使用vscode访问和编辑远程服务器文件
    使用 VS Code 远程连接Linux服务器告别xshell
    Docker安装参考文档记录
    yolov5在Centos系统上部署的环境搭建
    YOLOV5四种网络结构的比对
    k8s部署kube-state-metrics组件
    Kubernetes集群部署Prometheus和Grafana
    Prometheus介绍
  • 原文地址:https://www.cnblogs.com/yswyzh/p/8656860.html
Copyright © 2020-2023  润新知