今日算法学习小结

给你两个字符串 word1word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。

返回 合并后的字符串

复制代码
输入:word1 = "abc", word2 = "pqr"
输出:"apbqcr"
解释:字符串合并情况如下所示:
word1:  a   b   c
word2:    p   q   r
合并后:  a p b q c r

class Solution:

def mergeAlternately(self, word1: str, word2: str) -> str:

len1 = len(word1)

len2 = len(word2)

i = j = 0

ans = \[\] 建立一个空的列表,用于存放合并后的字符串

while i < len1 or j < len2 : 只有两个字符串都完全读取完才结束循环

if i < len1 : 指针指到第一个字符串

ans.append(word1i) 将读到的字符加入列表

i+=1 指针向后移动一位

if j < len2 : 同理对第二个字符串进行操作

ans.append(word2j)

j+= 1

return "".join(ans) 此时ans为列表,所以需要转为字符串返回

找不同

给定两个字符串 st ,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例 1:

复制代码
输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。

class Solution:

def findTheDifference(self, s: str, t: str) -> str:

count = {} 建立一个空字典,用于统计每个字符所出现的次数

for i in t : 遍历长的字符串

counti = count.get(i,0)+1 将字典的键设置为该字母,值先调用之前所定义的值,默认值为0,并加1 通过循环统计每个字母出现的次数

for i in s : 遍历短的字符串

counti -= 1 如果这个字母出现过,则值-1,最后相同的字母的值会变为0

for i,freq in count.items() : 值等于1 的就说明是s里没有只在t里的字母

if freq == 1 :

return i

给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。

中间位置 middleIndex 是满足 nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1] 的数组下标。

如果 middleIndex == 0 ,左边部分的和定义为 0 。类似的,如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0

请你返回满足上述条件 最左边middleIndex ,如果不存在这样的中间位置,请你返回 -1

复制代码
输入:nums = [2,3,-1,8,4]
输出:3
解释:
下标 3 之前的数字和为:2 + 3 + -1 = 4
下标 3 之后的数字和为:4 = 4

class Solution:

def findMiddleIndex(self, nums: Listint) -> int:

total = sum(nums) 先计算数组全部数的和

left_sum = 0 定义左边之和为0

for i in range (len(nums)) : 遍历整个数组

right_sum = total-left_sum-numsi 右边的和为总和-左边的和-当前这个数

if right_sum == left_sum : 如果左边之和等于右边之和,满足条件,返回下标

return i

left_sum += numsi 如果不满足,则更新左边之和。

return -1 如果循环结束,没找到返回-1

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

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

复制代码
输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

复制代码
输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

复制代码
输入: nums = [1,3,5,6], target = 7

输出: 4

用二分查找的方法

class Solution:

def searchInsert(self, nums: Listint, target: int) -> int:

left,right = 0,len(nums) 定义左右端点,左闭右开,右端点取不到

while left < right :

mid = left + (right-left)//2

if numsmid == target :

return mid

elif numsmid < target :

left = mid + 1 因为mid的值已经判断过不满足条件,所以需要+1

else :

right = mid

return left

相关推荐
WZF-Sang5 小时前
网络基础——2
服务器·网络·c++·学习·网络编程·php
心中有国也有家7 小时前
E-Brufen 技术选型全景:Flutter + 鸿蒙 + Hive CE
hive·hadoop·学习·flutter·华为·harmonyos
New农民工7 小时前
射频芯片学习-ExpressLRS 对频流程分析
学习
Tom@敲代码8 小时前
js学习笔记-01
javascript·笔记·学习
辞旧 lekkk8 小时前
【Qt】 系统相关:事件与定时器
开发语言·qt·学习·萌新
zzzll11118 小时前
如何学习AI Agent?
java·人工智能·学习·程序员·大模型
默默敲代码的徐哥儿9 小时前
八股文整理——后端
java·开发语言·spring boot·后端·学习
巴巴媛6669 小时前
STM32学习笔记【32.BKP + RTC】
笔记·stm32·学习
网络与设备以及操作系统学习使用者11 小时前
通信的物理与逻辑双维度解析
学习·深度优先