暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

每日一算法-基础1

每日一Python 2021-03-24
398

开始刷题啦!

今天刷的是基础中数组部分的两道简单题,一是删除有序数组的重复项,一个是经典的杨辉三角打印问题。

1.删除有序数组中的重复项

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

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

说明:

示例 1:

解题思路:

要原地删除数组,所以不能另外新声明一个数组;数组是有序的,那就比较好办,定义一个变量来表示删除重复数字后的当前插入位置,遍历,比较它和遍历数组的位置的数字大小,相同则继续遍历,否则写入数组:

class Solution:
  def removeDuplicates(self, nums: List[int]) -> int:
      k =0
      lens = len(nums)
       
      for i in range(1, lens):
          if nums[i] == nums[k]:
              continue
          else:
              k = k+1
              nums[k] = nums[i]
      return k+1

看了一下讨论,有用到python里的数组的计数函数count的,试了一下能通过,但是用时远远超过上一个方法,因为每个位置都要经过一次遍历来进行计数,比较耗时,代码如下

 class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
      for i in nums[:]:
        if nums.count(i) ==1:
          continue
        else:
          nums.remove(i)
      return len(nums)

用时比较:


2.杨辉三角

题目:


示例  

解题思路

经典问题,杨辉三角,每个数是它左上方和右上方的数的和,主要是要在计算本行的数的时候怎样读取上一行的数,我的思路是将所有行的数组都存在一个allList中,这样上一行的数就可以根据数组index来得到,看讨论里有人定义了一个pre变量来保存上一行的数。我的代码及结果:

class Solution:
  def generate(self, numRows: int) -> List[List[int]]:
      allList = []
      for i in range(numRows):
          tmp = [1] * (i+1)
          if numRows >=2:
              for j in range(i):
                  tmp[j] = allList[i][j-1] + allList[i][j]
              allList.append(tmp)
          return allList

以上是今天的刷题内容,有什么问题可以加群询问哦



文章转载自每日一Python,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论