zoukankan      html  css  js  c++  java
  • Leetcode 初刷(1)

    1、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9

    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]

    方法1:思路简单,时间复杂度高   用时:3124ms,内存:12.5MB

    def twoSum2(nums,target):#3124ms,12.5MB
        for i in range(0,len(nums)):
            tmp = target - nums[i]
            for j in range(i+1,len(nums)):
                if tmp == nums[j]:
                    return [i,j]

    方法2:将只要读取到的数据就存入字典,提高效率  用时:60ms,内存:13MB

    def twoSum(nums,target):#60ms  13MB
        d = {}
        for i in range(0,len(nums)):
            tmp = target - nums[i]
            if tmp in d:
                return [d[tmp],i]
            else:
                d[nums[i]] = i
    

    2、给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

    示例 1:

    输入: "abcabcbb"
    输出: 3
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    示例 2:

    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    示例 3:

    输入: "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
      请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

    方法1:超出时间限制

    def lengthOfLongestSubstring(s):#超出时间限制
        max_len = 0
        for i in range(0,len(s)):
            res = ''
            for j in range(i,len(s)):
                if s[j] in res:
                    break
                else:
                    res += s[j]
            if len(res) > max_len:
                max_len = len(res)
        return max_len

    方法2:利用index找到未重复字符的下一个开始存储到l(l中存的都是不重复子串),理解起来也很简单,用时:64ms,内存:12.2MB

    def lengthOfLongestSubstring4(s):  # 'dvdf'  从上一个重复位置开始!!!
        l = []
        res = []
        for x in s:
            if x not in l:
                l.append(x)
            else:
                res.append(len(l))
                i = l.index(x)
                l = l[i + 1:]
                l.append(x)
        res.append(len(l))
        return max(res) if res else 0

    继续加油!在实际代码中能不用双重for循环就不要用!

  • 相关阅读:
    linux环境下的时间编程
    golang1.13中重要的新特新
    vs2019+cmake实现Linux远程开发
    现代c++与模板元编程
    一个commit引发的思考
    golang中判断两个slice是否相等
    c++性能测试工具:计算时间复杂度
    c++性能测试工具:google benchmark入门(二)
    使用vs2019进行Linux远程开发
    智能指针和二叉树(3):图解查找和删除
  • 原文地址:https://www.cnblogs.com/erbaodabao0611/p/11287654.html
Copyright © 2011-2022 走看看