Skip to content

Fullzoon/python-leetcode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Python LeetCode

面试经典 150 题

001 88.合并两个有序数组

把一个有序数组插入到另一个有序数组中,使用双索引逐个判断两个数组中元素的大小往里插入

002 27.移除元素

移除数组内指定元素,只要便利数组逐个删除就可以

003 26.删除有序数组中的重复

删除重复项,考虑到数组为非严格递增,从下标1开始,逐个元素跟前一个元素对比,相等的就删掉

004 80.删除有序数组中的重复项II

同上但是最多保留两个相同数字,考虑到数组为非严格递增,从下标2开始逐个跟前两个元素对比,相等的就删掉

005 169.多数元素

数组中一定有一个元素的出现的数量是超过 length/2 的,遍历数组统计每个元素出现的次数,就能知道谁出现次数超过 length/2

006 189.轮转数字

数组整体右移n位,只要把右移的位数n~结尾切掉放到数组开头就可以

007 121.买卖股票的最佳时机

高买低卖,遍历数组只要判断当前索引元素比上个小就重新买,利润高于之前的利润就统计(这个比较抽象)

008 122.买卖股票的最佳时机II

依旧高买低卖,从下标1开始,跟前一个元素对比,大的话就算利润,小的话就不计入

009 55.跳跃游戏

从第一个数开始往后跳,每跳一位减1,同时跟当前位的数字对比大小,大的话就继续跳,小的话就用当前位数字替换

010 45.跳跃游戏II

  1. 从后往前看,找到每一次下标最靠前且能跳到结束的位置,往复几次,找到下标为0时就能得到最少跳跃次数,时间复杂度为 O(n²)

  2. 从前往后看,从下标为0开始,在步数内比较谁能跳的最远,就跳到对应的下标,直到跳到结尾,时间复杂度为 O(n)

011 274.H指数

  1. 多次遍历列表,每次h增加1,看是否符合条件,知道不符合为止,得出最大h。时间复杂度为 O(n²)

  2. 先给数组倒序排序,再根据下标和对应位置的值来判断h,时间复杂度为 O(n)

012 380.O(1)时间插入、删除和获取随机元素

就正常写,用数组来执行插入删除操作

013 238.除了自身以外数组的乘积

  1. 先计算列表所有元素的积,把0单独统计,再根据每种情况来计算对应位置,不让用除法就用**-1,时间复杂度为 O(n)

  2. 先计算左边的积,再计算右边的积,再依次把他们乘到一起,时间复杂度为 O(n)

014 134.加油站

首先判断总油量一定大于等于总消耗量,不然走不了全程。然后从0累计每个站的(油量-消耗),当出现负数时起始站一定不在范围内,起始站索引设置成下一个位置重新累计

015 135.分发糖果

从头开始,逐个跟前一个对比,如果更大在前一个的基础上+1就可以。但是如果更小就复杂了,简单的办法就是把数组反转再处理一遍,如果计算的糖果数量比正着计算的大,就替换

016 42.接雨水

先拿到索引最靠后的最大值。然后从前依次往后对比,拿到局部相对较大的值跟最大值形成一个容器,每次遍历到一个数字就判断在当前位置能接住多少。对比到最大值的索引后再倒着算剩下的,加起来就是结果

017 13.罗马数字转整数

从左到右依次累加,如果当前索引的字母代表数字比上一索引字母代表数字更大,就把上一索引字母代表数字减去二倍,再加当前索引

018 12.整数转罗马数字

没什么技巧,简单的计算即可

019 58.最后一个单词的长度

先去除结尾空格,再以空格分割,取最后一个单词长度

020 14.最长公共前缀

从第一个单词的第一个字母开始,挨个单词比较,使用 startwith 方法

021 151.反转字符串中的单词

先去除两边空格,再以空格把字符串切成数组,遍历数组把有内容的部分从后往前加起来

022 6.Z字形变换

根据规律,当共有R行时候,每 2R-1 行是一个循环。其中,前R个是从上到下排列的,后R-1个是从下到上排列,根据这个规律列循环即可

023 28.找出字符串中第一个匹配项的下标

字符串从头开始往后,逐段对比是否符合匹配项

024 68.文本左右对齐

先把单词数组拆分成二维数组,确保每个数组是一行,再计算中间要插入多少个空格,最后一行特殊处理

025 125.验证回文串

给的字符串逐个字符用isalnum判断是否为字母数字,然后拼接成新字符串,转小写再反转判断是否为同一个

026 392.判断子序列

遍历子字符串所有字符,逐个判断是否在父字符串里,返回结果

027 167.两数之和II - 输入有序数组

从两边开始相加,如果和比目标大,就让右边往前移,如果和比目标小,就让左侧往后移,一定有唯一解的情况就不用考虑两个索引碰到一起

028 11.盛最多水的容器

  1. 用双循环的方式构建,但是遍历次数太多了,超时

  2. 用双指针方式,最小的一直变

029 15.三数之和

两个指针放在左右两侧,中间一个在遍历,遇到总数<0,中间指针右移,遇到总数>0,右边指针左移

030 209.长度最小的子数组

从第一个开始往后累加,如果总数超过target,就让左边索引+1再计算,如果总数小于target,就让右边索引+1再计算

About

刷刷题

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages