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

  • 相关阅读:
    windows 全局安装 composer【转】
    CentOS7使用firewalld打开关闭防火墙与端口
    转 Page Object模式
    转 用SQL语句,删除掉重复项只保留一条
    转 什么是Mbps、Kbps、bps、kb、mb及其换算和区别
    转 使用Python的logging.config.fileConfig配置日志
    转 zookeeper,dubbo和Nginx的区别
    转 lsof命令详解
    Fatal Error -26000: Not enough memory (12320 bytes) for “new buffer in LrwSrvNetTaskIt 问题解决及lr脚本心得
    Action.c(28): Error -27796: Failed to connect to server "xxxx": [10060] Connection timed out
  • 原文地址:https://www.cnblogs.com/china-fanny/p/7551728.html
Copyright © 2020-2023  润新知