将各大公司所涉及到的算法题目,整理到这儿:
字节跳动
Leetcode #72(hard), 字符串的编辑距离.【DP】
题解
https://leetcode.com/problems/edit-distance/discuss/25846/C%2B%2B-O(n)-space-DP
class Solution(object):
def minDistance(self, word1, word2):
"""
:type word1: str
:type word2: str
:rtype: int
"""
len1 = len(word1)
len2 = len(word2)
if len1 == 0 and len2 ==0:
return 0
#dp表示以i与j分别结尾的两个单词,最小操作步数
#注意下下面len1与len2的位置
dp = [[0]*(len2+1) for i in range(len1+1)]
i = 1
while i <= len1:
dp[i][0] = i
i += 1
j = 1
while j <= len2:
dp[0][j] = j
j += 1
for i in range(1,len1+1):
for j in range(1,len2+1):
if word1[i-1] == word2[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1
return dp[len1][len2]
统计有序数组里平方和(或者绝对值)的数目
def countDifferentAbsolute(arr):
n = len(arr)
count = 0
left = 0
right = n - 1
while left < right:
while left < right and abs(arr[right]) >= abs(arr[left]):
if abs(arr[right]) == abs(arr[left]):
left += 1
right -= 1
count += 1
while left < right and abs(arr[left]) >= abs(arr[right]):
if abs(arr[right]) == abs(arr[left]):
right -= 1
left += 1
count += 1
return count
if __name__ == '__main__':
array = [-3,-2,-1,1,2]
print(countDifferentAbsolute(array))
1,2,…,N中,字符1出现的次数
在这里插入代码片
无序数组找中位数
def findMiddle(arr):
n = len(arr)
low = 0
high = n -1
mid = (low+high)>>1
while True:
pos = partition(arr,low,high)
if pos == mid:
break
if pos < mid:
low = pos + 1
if pos > mid:
high = pos - 1
if mid%2:
return arr[mid]
else:
partition(arr,mid+1,n-1) #注意这一句,等于是在mid后面再排一次序,然后中间两个求均值
return (arr[mid] + arr[mid+1])/2
def partition(arr,low,high):
key = arr[low]
while low < high:
while low < high and arr[high] >= key:
high -= 1
arr[low] = arr[high]
while low < high and arr[low] <= key:
low += 1
arr[high] = arr[low]
arr[low] = key
return low
if __name__ == '__main__':
arr = [1,4,2,7,6,5]
print(findMiddle(arr))
字符串转整数
在这里插入代码片