从零开始刷Leetcode——数组(1.26)
文章目录
- 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)相关推荐
- 从零开始刷Leetcode——数组(11.15.16.18)
文章目录 11. 盛最多水的容器 15. 三数之和 16. 最接近的三数之和 18. 四数之和 前800题easy难度想做的已经做完了,之后是medium难度 11. 盛最多水的容器 给你 n 个非负 ...
- 从零开始刷Leetcode——数组(122.167.169)
文章目录 122.买卖股票的最佳时机 II 167.两数之和II 169.多数元素 122.买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计 ...
- 从零开始刷Leetcode——数组(27.35.53)
文章目录 27.移除元素 35.搜索插入位置 53.最大子序和 今天是27.35.53题.27和昨天的26题思想差不多,35比较简单,53确实想了一段时间. 27.移除元素 给你一个数组 nums 和 ...
- 从零开始刷Leetcode——数组(941.977)
文章目录 941. 有效的山脉数组 977. 有序数组的平方 三级目录 941. 有效的山脉数组 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false. 让我们回顾一下, ...
- 从零开始刷Leetcode——数组(896.905.914.922)
文章目录 896. 单调数列 905. 按奇偶排序数组 914. 卡牌分组 922. 按奇偶排序数组 II 896. 单调数列 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i &l ...
- 从零开始刷Leetcode——数组(830.849.888)
文章目录 830. 较大分组的位置 849. 到最近的人的最大距离 888. 公平的糖果交换 830. 较大分组的位置 在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组. 例 ...
- 从零开始刷Leetcode——数组(746.747)
文章目录 747. 至少是其他数字两倍的最大数 746. 使用最小花费爬楼梯 747. 至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是 ...
- 从零开始刷Leetcode——数组(31.33)
文章目录 31. 下一个排列 33. 搜索旋转排序数组 31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重 ...
- 从零开始刷Leetcode——数组(697.717.724)
文章目录 697. 数组的度 717. 1比特与2比特字符 724. 寻找数组的中心索引 697. 数组的度 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数 ...
最新文章
- php5.3的新特性
- 异部时钟电路的FPGA设计
- 【CyberSecurityLearning 附】虚拟机部署Linux操作系统(centos6.9、Ubuntu16.04)
- 双向多点路由重分布--如何防止路由环路以及次优路径
- linux 指令tftp传输文件_tftp命令_Linux tftp 命令用法详解:在本机和tftp服务器之间使用TFTP协议传输文件...
- 插值方法——Lagrange插值公式
- HTML文件类型定义
- EF批量插入太慢?那是你的姿势不对
- hackintool怎么重建缓存_mysql表数据装满了怎么办?自增id引发的bug。
- labview由于其他对话正在访问FIFO_LabVIEW常用工具、调试工具汇总
- 定时任务corn表达式设置
- 【设计模式】设计模式总览-----程序员的九阳神功
- Android与MVC设计模式相关操作
- 彻底明白php中cgi、fastcgi和php-cgi、php-fpm及php运行原理
- C# 打开指定目录并定位到文件
- 【python】公考数学
- 【收纳】电脑资料-高效整理电脑上的文件
- 基于Java的出租车管理系统的设计与实现
- android自定义实现分时图,Android专业版K线图、分时图 android-kline
- 计算机毕业设计django基于python仓库管理系统
热门文章
- 如何防止网站被SQL注入攻击之java网站安全部署
- XML与Web Service基础知识点
- ibatis_HelloWorld
- 数据库学mysql python_mysql学习(4)python操作数据库
- java boolean 对象_为什么Java后端用Boolean属性筛选不出对象,但改成String类型就可以了?...
- visual studio能统计代码规模吗_Windows电脑游戏运行库有必要装吗?
- 长沙android工程师,长沙安卓工程师辅导
- lisp一键室内标注_LISP-标注的自动位置调整
- Oracle数据库awr报告使用与分析
- 人生第一次被迫转行!实现月薪16K!勤能补拙是良训,一分耕耘一分才