一起刷Leetcode第一篇,数组和字典的妙用
时间:2022-07-22
本文章向大家介绍一起刷Leetcode第一篇,数组和字典的妙用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
引言
LeetCode作为一种资源,不得不说,是迄今为止用来改进面试式算法问题最有效的工具。 LeetCode收录了许多互联网公司的算法题目,被称为刷题神器。它扫遍全球,囊括中外,成为大家面试算法工程师以及程序员相关工作必刷的题库。
我们这个系列是刷Leetcode的经典题目,通过算法分析和知识总结来和大家分享如何在实际中运用Python。希望可以和大家一起进步和成长。
知识点总览
1、列表相关知识
2、字典相关知识
3、if语句以及for循环
4、数据结构:栈
两数之和
题目描述
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出
和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。
但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解法
根据题目描述,我们可以想到一个最简单的解题方式是用两个循环,但是需要两个循环“错开”,比如说第一个循环下标为a;第二个下表为b;那么b要大于a,以此来保证不重复利用元素:
class Solution(object): # my first solution
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for a in range(len(nums)):
for b in range(a+1,len(nums)):
if nums[a] + nums[b] == target:
output = [a,b]
return output
break
当然我们还有更多的解题思路,比如只用一次循环,然后借助Python中的字典在循环的过程记录下数值以及对应的索引,从而加速算法:
class Solution1(object): # best solution
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
dct = {}
for i, n in enumerate(nums):
if target - n in dct:
return [dct[target - n], i]
dct[n] = i
注意字典存储的方式将数字存在key中,而将数字对应的索引存在value中。
原题链接:https://leetcode-cn.com/problems/two-sum/
有效的括号
题目描述
给定一个只包含字符'(',')','{','}','['和']'的字符串,
确定输入字符串是否有效。
输入字符串在以下情况下有效:开括号必须由相同类型的括号关闭。
左括号必须按正确的顺序关闭。
注意,空字符串也被认为是有效的。
示例1:
输入:“()”
输出:真
示例2:
输入:“()(){}”
输出:真
示例3:
输入:“()”
输出:假
示例4:
输入:“(())”
输出:假
示例5:
输入:“{[]}”
输出:真
解法
对于这道题,大家如果学过数据结构就知道可以用“栈”来解决。在Python中我们可以字典来模拟这个栈:
class Solution(object): # my first solution
def twoSum(self, s):
"""
:type s: str
:rtype: bool
"""
socre = {'(':1,')':-1,'{':2,'}':-2,'[':3,']':-3 }
shed = []
for a_str in s:
if len(shed)>0:
if socre[a_str] == -socre[shed[len(shed)-1]]:
shed.pop(len(shed)-1)
else:
shed.append(a_str)
else:
shed.append(a_str)
if len(shed) == 0:
return True
else:
return False
原题链接: https://leetcode.com/problems/valid-parentheses/description/
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- BigData--分布式流数据流引擎Apache Flink
- 【项目实战】ADS 层数据导出
- 前端大杂货铺系列《七》
- BigData--大数据技术之Spark机器学习库MLLib
- 【LeetCode】三数之和
- BigData--大数据技术之SparkStreaming
- Jenkins 入门实战:GitHub Push触发Jenkins自动构建
- 2020最新编辑器集成eslint、prettier、stylelint,git提交预检查代码配置
- eslint+prettier学习
- C++ 友元函数
- BigData--大数据技术之SparkSQL
- BigData--大数据分析引擎Spark
- 大数据利器--Scala语言学习(高级)
- 大数据利器--Scala语言学习(基础)
- BCI-EEG脑电数据处理