leetcode第一次笔记

1.字符串的基本操作对象通常是字符串整体或者其子串
2.字符串操作;比较、连接等
C++、Python我们可以使用 == 来比较两个字符串;
Java我们可能无法使用 == 来比较两个字符串
C ++中,字符串是可变
Java、Python中,字符串是不可变
可以使用 toCharArray 将其转换为字符数组,如果你经常必须连接字符串,最好使用一些其他的数据结构,如 StringBuilder

3.整数数组 nums,一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。

注意在可能最左边或者最右边出现。#左右没有意味着0
技巧;left*2+nums[i]==sum(nums)

代码 class Solution:
def pivotIndex(self, nums: List[int]) -> int:
left=0
for i in range(0,len(nums)):
if left*2+nums[i]==sum(nums):
return i
left+=nums[i]
return -1
!
在这里插入图片描述

4.给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

思想;判断数组元素是否大于等于目标值,是则返回索引。若均不满足,则返回数组长度

5.以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

思想,比较if start1<start2
if end1<start2
return [start1, end2] and [start2, end2]
elseif end1>start2
return [start1, end1]
elseif end1>start1
return [start1, end2]
如此反复比较,两两比较,利用start的排序,相邻顺序比较下去即可

6.二维数组的本质上仍然是一个一维数组,内部的一维数组仍然从索引 0 开始,我们可以将它看作一个矩阵。
注意,实际数组中的元素由于类型的不同会占用不同的字节数,因此每个方格地址之间的差值可能不为 1。

思想;先将矩阵对角翻转再y轴翻转
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
l = len(matrix) # 一层时的数量
for i in range(l): # 对角对称翻转
for j in range(i,l):
matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]
for i in range(l): # y轴对称翻转
matrix[i][:]=matrix[i][::-1]

在这里插入图片描述
7零矩阵;编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。

思想,用for循环将行与列计算出来。组装即可,剩下用0填充。

8.对角线遍历
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。

思想,讨论边列问题,
第一个是对角线上的数据(x,y)对应 x+y 的值都是一致的。
当 x+y 为奇数时对角线上的数据正序输出,为偶数时倒叙输出。
同时注意x+y到最大值时会有一个极限,先增后减。

9.最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”

思想;遍历最短子串单个元素的同时,与其他子串同一位置的单个元素相比较,返回的bool值存在空数组里,遍历一次,若全部为true,则添加最短子串单个元素到空字符串里

lass Solution:
def longestCommonPrefix(self, strs: List[str]) -> str: # 判断字符串是否为空
if len(strs)==0:
return ‘’
elif len(strs) == 1:
return strs[0]# 遍历字符串
else:
target = ‘’
s = sorted(strs, key=lambda x: len(x)) # 按子串长度从小到大排序
for i in range(len(s[0])):
l=[]
for j in s[1:]:
l.append(s[0][i]==j[i])
if all(l):
target+=s[0][i]
else:
break
return target

10.长回文子串;给你一个字符串 s,找到 s 中最长的回文子串。

思想;以这个边界作为中心,进行循环扩散,直到两边的值不相同为止,然后返回这个边界下标,用于给外面判断最长字串

11.翻转字符串里的单词给定一个字符串,逐个翻转字符串中的每个单词。
说明:无空格字符构成一个 单词 。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

12.字符串匹配算法:KMP
Knuth–Morris–Pratt(KMP)算法是一种改进的字符串匹配算法,它的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的,时间复杂度是 O(m+n)

13.实现 strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。

暴力方法:
枚举原字符串中的每个字符作为起点
构造一个和匹配串一样长度的子串sub,将sub直接与其做对比:

14.双指针:使用双指针技巧,其思想是分别将两个指针分别指向数组的开头及末尾,然后将其指向的元素进行交换,再将指针向中间移动一步,继续交换,直到这两个指针相遇。
从两端向中间迭代数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值