LeetCode--数组(1)

这篇博客主要讲解了LeetCode中关于数组的几道经典题目,包括两数之和、无重复字符的最长子串、盛最多水的容器、三数之和、下一个排列以及在排序数组中查找元素的第一个和最后一个位置。通过实例展示了如何利用字典、双指针等方法解决这些问题。
摘要由CSDN通过智能技术生成

1、两数之和(Two Sum)
题目描述:
  给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

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

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

代码:

 class Solution(object):
        def twoSum(self,nums,target):
            if len(nums)<=1:
                return Flase
            else:
                dict={}
                for i in range(len(nums)):
                    if nums[i] in dict:
                        return[dict[nums[i]],i]
                    else:
                        dict[target-nums[i]]=i#  target-nums[i]为key

解析: 利用一个字典,它的key是当前遍历的值与target相差多少,value是当前值得索引。在遍历数组时候,每当遍历到一个值时就查看与target的差值在不在字典中,如果在就返回当前索引,不在就把[差值,索引]记录。

3、无重复字符的最长子串

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

示例 :

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

代码:

思路:用hash表来做,判断一个字母是否在表里面,不在ans就加1,在就让指针i指向最后一个出现的相同字母。维护ans的值

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        st={}
        i,ans=0,0
        for j in range(len(s)):
            if s[j] in st:
                i=max(st[s[j]],i)
            ans=max(ans,j-i+1)
            st[s[j]]=j+1
        return ans
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值