今日算法学习小结

给你两个字符串 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(word1[i]) 将读到的字符加入列表

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

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

ans.append(word2[j])

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 : 遍历长的字符串

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

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

count[i] -= 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: List[int]) -> int:

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

left_sum = 0 定义左边之和为0

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

right_sum = total-left_sum-nums[i] 右边的和为总和-左边的和-当前这个数

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

return i

left_sum += nums[i] 如果不满足,则更新左边之和。

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: List[int], target: int) -> int:

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

while left < right :

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

if nums[mid] == target :

return mid

elif nums[mid] < target :

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

else :

right = mid

return left

相关推荐
Alice-YUE11 小时前
前端性能优化完全指南:从指标到实战
前端·学习·性能优化
你数过天上的星星吗11 小时前
Python学习笔记二(函数、类与对象)
笔记·python·学习
stm32 菜鸟11 小时前
nucleo-f411re学习记录-11,蓝牙模块HC-05
学习
我是发哥哈11 小时前
三款主流AI视频生成模型商用能力对比与选型分析
大数据·人工智能·学习·ai·chatgpt·aigc·音视频
Titan202411 小时前
C++11学习笔记
c++·笔记·学习
寒秋花开曾相惜11 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.3 字级的组合电路和HCL整数表达式)
android·网络·数据结构·笔记·学习
2301_8090494212 小时前
WSL无法打开gui界面时,以及安装东西分两种
学习
Titan202412 小时前
C++位图学习笔记
c++·笔记·学习
念恒1230612 小时前
Python(运算与操作)
python·学习
从负无穷开始的三次元代码生活12 小时前
Docker生产环境实战从0-1学习基础指南——快速掌握
学习·docker·容器·云技术