zoukankan      html  css  js  c++  java
  • [LeetCode] 1.Two Sum

    1. Two Sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific target.

    You may assume that each input would have exactly one solution, and you may not use the same element twice.

    Example:

    Given nums = [2, 7, 11, 15], target = 9,
    
    Because nums[0] + nums[1] = 2 + 7 = 9,
    return [0, 1].

    ===========大致题目意思================

    1.两者求和

    有一个整型数组,返回结果依然是数组,元素是给定数组的两个下标,这两个下标对应的元素相加等于一个特定的目标数值

    思路一:

    1. 需要进行两层for循环;

    2. 第二层for循环下标应从第一个for循环下标+1开始,防止重复相加,及自己和自己相加;

    3. 条件语句应该是两个元素相加等于目标数字时,获得这两个元素对应的下标放入数组,并返回

    实现代码如下:

    class Solution {
        func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
            var resultNums:[Int] = [0, 0]
            
            for i in 0 ..< nums.count {
                for j in i+1 ..< nums.count {
                    if nums[i]+nums[j] == target {
                        resultNums[0] = i
                        resultNums[1] = j
                        
                        return resultNums
                    }
                }
            }
            
            return resultNums
        }
    }

    两层for循环好理解但是效率太低,可以使用一层for循环就可以实现 ,运行效率大大提高:

    思路二:

    1. 定义一个字典,key放数组的元素值,value放下标;

    2. 一层for循环记录一个下标;

    3. 判断字典中指定目标数减去当前下标对应的元素值的差值为字典的key,看对应的这个key存不存在value

        3.1 若不存在,则将这个元素为key的字典设置value值为当前下标;

        3.2 若存在,则将这个差值为下标对应的字典value值追加到结果数组中,在追加当前下标,再返回目标数据

    实现代码如下:

    class Solution {
        func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
            var resultNums:[Int] = []
            var numberDic:[Int : Int] = [:]
            
            for i in 0 ..< nums.count {
                if numberDic[target-nums[i]] != nil {
                    resultNums.append(numberDic[target - nums[i]]!)
                    resultNums.append(i)
                    
                    return resultNums
                } else {
                    numberDic[nums[i]] = i
                }
            }
            
            return resultNums
        }
    }
    

    PS:题目应该注意的点:返回的是下标,而不是下标对应的元素

  • 相关阅读:
    性能测试分析
    常见的性能缺陷
    性能测试中TPS上不去的几种原因浅析
    Linux新增和删除环境变量
    JProfiler的详细使用介绍
    详解Tomcat的连接数和线程池
    造数据存储过程
    shell脚本解压多个jar包
    使用shell快速建立上万个文件夹
    df、du命令
  • 原文地址:https://www.cnblogs.com/china-fanny/p/7551728.html
Copyright © 2011-2022 走看看