面经整理-LeetCode篇

将各大公司所涉及到的算法题目,整理到这儿:

字节跳动

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))

字符串转整数

在这里插入代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猴猴猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值