leepcode – 5-16

  • 2020 年 1 月 16 日
  • 筆記

1、有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"  输出: true

解答:

while '{}' in s or '()' in s or '[]' in s: ##判断字符串是否在列表S中      s = s.replace('{}', '') ## 如果在,用空字符串替代      s = s.replace('[]', '')      s = s.replace('()', '')  return s == '' ## 进行逻辑判断

2、移除元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:

给定 nums = [3,2,2,3], val = 3,    函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。    你不需要考虑数组中超出新长度后面的元素。

解答:

j = 0  ##进行一个赋值  for i in range(len(nums)):      if nums[i] != val: ##如果列表里的值不等于val          nums[j] = nums[i] ## 将i所代表的值,赋给j          j +=1  ##在进行一次循环  return(j)

3、搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5  输出: 2

解答:

for i in range(len(nums)):      if nums[i] == target: ##如果数组中的值等于目标值          return (i)  ##返回值所对应的索引值      else:          nums.append(target) ##如果数组中的值不等于目标值,则将目标值加入到列表中          nums.sort() ## 对列表进行重新排序          break  return (nums.index(target)) ##获取到目标值所在的索引值

4、最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],  输出: 6  解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

解答:

for i in range(len(nums)):      nums[i] = nums[i]+max(nums[i-1],0) ##nums[i-1]并不是数组前一项的意思,      # 而是到前一项为止的最大子序和,和0比较是因为只要大于0,就可以相加构造最大子序和。      # 如果小于0则相加为0,nums[i]=nums[i],相当于最大子序和又重新计算。其实是一边遍历一边计算最大序和  print(max(nums))

5、最后一个单词的长度

给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指由字母组成,但不包含任何空格的字符串。

示例:

输入: "Hello World"  输出: 5
if not s:     return 0  s1 = s.split()     if not s1:        return 0  return len(s1[-1])