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:题目应该注意的点:返回的是下标,而不是下标对应的元素

  • 相关阅读:
    帝国cms 同个IP可提交一次
    帝国cms 图片相对路径绝对路径设置问题+帝国cms 手机端调用图片问题
    帝国CMS 手机版制作+帝国PC跳转到手机+重新定向
    帝国cms 相关问题
    简洁 清晰弹出层讲解制作(图片点击放大)
    webstorm 2016最新版破解+汉化
    ajax点击不断加载数据列表
    js中substr,substring,indexOf,lastIndexOf,split的用法
    Parallax.js|强大的javascript视觉差特效引擎
    一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
  • 原文地址:https://www.cnblogs.com/china-fanny/p/7551728.html
Copyright © 2011-2022 走看看