文章目录

  • 1.两数之和
  • 26.删除排序数组中的重复项

马上要去读研了,作为一个转码的ee学生,刷题还是很必要的。从零开始,希望能坚持下去!打算按照类别和难度慢慢刷,一天两三道题左右,争取明年夏季找实习之前能刷完,最差也得把easy和medium过一遍。编程语言为Python,水平有限,要是有更快的解法可以教教我

第一次是数组easy难度的1、26,比较菜,一开始慢点来

1.两数之和

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

方法1.暴力解法

class Solution:def twoSum(self, nums, target):length = len(nums)for i in range(length):for j in range(i+1, length):if nums[j] == target - nums[i]:return [i,j]else:continue

作为新手第一个想出来的方法就是暴力枚举,很明显两个for循环耗时很大,可改良的地方很多。速度5596ms

方法2.单for循环

class Solution:def twoSum(self, nums, target):length = len(nums)for i in range(length):if target-nums[i] in nums[i+1:]:j = nums[i+1:].index(target-nums[i])j = j+i+1return [i,j]else:continue

相比第一种有两种提升,速度提升很多倍,908ms

  • 用数值 in 列表判断是否存在
  • 用index方法确定索引位置

方法3.用字典模拟哈希求解

def twoSum(nums, target):hashmap={}for ind,num in enumerate(nums):hashmap[num] = indfor i,num in enumerate(nums):j = hashmap.get(target - num)if j is not None and i!=j:return [i,j]

借鉴了其他大佬的解法,将原来的列表的index和value组合成为一个字典,再利用字典进行寻找值,速度72ms

方法4.在方法3的基础上改进

def twoSum(nums, target):hashmap = {}for i, value in enumerate(nums):diff = target - valueif diff in hashmap:return [hashmap.get(diff), i] hashmap[value] = i

依旧借鉴了别人的答案,个人感觉少了一个for循环所以快了一点点,这个速度64ms才40%左右。速度再快的解法我就不会了,可能用其他语言比如c++会更快一点吧

26.删除排序数组中的重复项

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

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

方法1.反向遍历

class Solution:def removeDuplicates(self, nums: List[int]) -> int:length = len(nums)for i in range(length-1,0,-1):if nums[i] in nums[:i]:del nums[i]else:continuereturn len(nums)

最开始正向遍历总会导致index变得很乱,后来想到反向遍历,但是这个办法没注意有序,把判断in改成前后两个值是否相同应该还能快点,耗时2916ms

方法2

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

第二种方法不删除数组,而是正向遍历边比较边赋值直到最后一个,由于是带顺序的数组可以这么用,要是无序可能就要想别的办法,用时44ms

方法3.单指针

class Solution:def removeDuplicates(self, nums: List[int]) -> int:j=1while j<len(nums):if nums[j-1] == nums[j]:nums.pop(j)else: j+=1return len(nums)

此方法不断比较前后的值,相同则删除靠后的值继续比较,不同则向后移一位,速度56ms

从零开始刷Leetcode——数组(1.26)相关推荐

  1. 从零开始刷Leetcode——数组(11.15.16.18)

    文章目录 11. 盛最多水的容器 15. 三数之和 16. 最接近的三数之和 18. 四数之和 前800题easy难度想做的已经做完了,之后是medium难度 11. 盛最多水的容器 给你 n 个非负 ...

  2. 从零开始刷Leetcode——数组(122.167.169)

    文章目录 122.买卖股票的最佳时机 II 167.两数之和II 169.多数元素 122.买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计 ...

  3. 从零开始刷Leetcode——数组(27.35.53)

    文章目录 27.移除元素 35.搜索插入位置 53.最大子序和 今天是27.35.53题.27和昨天的26题思想差不多,35比较简单,53确实想了一段时间. 27.移除元素 给你一个数组 nums 和 ...

  4. 从零开始刷Leetcode——数组(941.977)

    文章目录 941. 有效的山脉数组 977. 有序数组的平方 三级目录 941. 有效的山脉数组 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false. 让我们回顾一下, ...

  5. 从零开始刷Leetcode——数组(896.905.914.922)

    文章目录 896. 单调数列 905. 按奇偶排序数组 914. 卡牌分组 922. 按奇偶排序数组 II 896. 单调数列 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i &l ...

  6. 从零开始刷Leetcode——数组(830.849.888)

    文章目录 830. 较大分组的位置 849. 到最近的人的最大距离 888. 公平的糖果交换 830. 较大分组的位置 在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组. 例 ...

  7. 从零开始刷Leetcode——数组(746.747)

    文章目录 747. 至少是其他数字两倍的最大数 746. 使用最小花费爬楼梯 747. 至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是 ...

  8. 从零开始刷Leetcode——数组(31.33)

    文章目录 31. 下一个排列 33. 搜索旋转排序数组 31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重 ...

  9. 从零开始刷Leetcode——数组(697.717.724)

    文章目录 697. 数组的度 717. 1比特与2比特字符 724. 寻找数组的中心索引 697. 数组的度 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数 ...

最新文章

  1. php5.3的新特性
  2. 异部时钟电路的FPGA设计
  3. 【CyberSecurityLearning 附】虚拟机部署Linux操作系统(centos6.9、Ubuntu16.04)
  4. 双向多点路由重分布--如何防止路由环路以及次优路径
  5. linux 指令tftp传输文件_tftp命令_Linux tftp 命令用法详解:在本机和tftp服务器之间使用TFTP协议传输文件...
  6. 插值方法——Lagrange插值公式
  7. HTML文件类型定义
  8. EF批量插入太慢?那是你的姿势不对
  9. hackintool怎么重建缓存_mysql表数据装满了怎么办?自增id引发的bug。
  10. labview由于其他对话正在访问FIFO_LabVIEW常用工具、调试工具汇总
  11. 定时任务corn表达式设置
  12. 【设计模式】设计模式总览-----程序员的九阳神功
  13. Android与MVC设计模式相关操作
  14. 彻底明白php中cgi、fastcgi和php-cgi、php-fpm及php运行原理
  15. C# 打开指定目录并定位到文件
  16. 【python】公考数学
  17. 【收纳】电脑资料-高效整理电脑上的文件
  18. 基于Java的出租车管理系统的设计与实现
  19. android自定义实现分时图,Android专业版K线图、分时图 android-kline
  20. 计算机毕业设计django基于python仓库管理系统

热门文章

  1. 如何防止网站被SQL注入攻击之java网站安全部署
  2. XML与Web Service基础知识点
  3. ibatis_HelloWorld
  4. 数据库学mysql python_mysql学习(4)python操作数据库
  5. java boolean 对象_为什么Java后端用Boolean属性筛选不出对象,但改成String类型就可以了?...
  6. visual studio能统计代码规模吗_Windows电脑游戏运行库有必要装吗?
  7. 长沙android工程师,长沙安卓工程师辅导
  8. lisp一键室内标注_LISP-标注的自动位置调整
  9. Oracle数据库awr报告使用与分析
  10. 人生第一次被迫转行!实现月薪16K!勤能补拙是良训,一分耕耘一分才