01反转一个3位整数
123->321;900->9
class Solution:
def reversal(nunmber):
h = int(number / 100)
t = int(number % 100 / 10)
z = int(number % 10)
return(100 * z + 10 * t + h)
02合并排列(有序)数组
[1],[1]->[1,1];
[1,2,3,4],[2,4,5,6]->[1,2,2,3,4,4,5,6]
class Solution:
def GetArray(A,B):
i,j = 0,0
c=[]
while i < len(A) and j < len(B):
if A[i] < B[j]:
c.append(A[i])
i += 1
else:
c.append(B[j])
j += 1
while i < len(A):
c.append(A[i])
i += 1
while J < len(B):
c.append(B[i])
j += 1
return c
3.旋转字符串
给定一个字符串(数组形式)和一偏移量,根据偏移量从左向右旋转。
str=“abcdefg”,offset=3 -> abcdefg
str=“abcdefg”,offset=1 -> gabcdef
'''
s*2,选取len(s)-offset到2len-offset之间的值
'''
def roating(s,offset):
if len(s)>0:
offset = offset % len(s)
temp = (s + s)[len(s) - offset : 2 * len(s) - offset]
for i in range(len(temp)):
s[i] = temp[i]
4、相对排名
N名运动员得分,前三名金银铜牌,每人成绩独一无二
[5,4,3,2,1] -> [“金牌”,“银牌”,“铜牌”,“4”,“5”]
def ranking(nums):
score = {}
for i in range(len(nums)):
score[nums[i]] = i
sortedScore = sorted(nums,reverse = Ture)
answer = [0] * len(nums)
for i in range(len(sortedScore)):
res = str(i + 1)
if i == 0:
res = "金牌"
if i == 1:
res = "银牌"
if i == 2:
res = "铜牌"
answer[score[sortedScore[i]] = res
return answer
5、二分查找
给定一个升序数组和target,查找target第一次出现的下标
'''
中指针=(左+右)//2,更新为(中,右)或(左,中)
'''
def bSearch(self,nums,target):
return self.search(nums, 0,en(nums)-1, target)
def search(nums, start, end, target):
if start > end:
return -1
mid = (start + end) // 2
if nums[mid] > target:
return self.search(nums, start, mid, target)
if nums[mid] == target:
return mid
if nums[mid] < target:
return self.search(nums,mid,end,target)
6、下一个更大的数
nums1是nums2的子集。在nums2的相应位置找到nums1所有元素的下一个更大数字。
nums1=[4,1,2]、nums2=[1,3,4,2] --> [-1,3,-1]
def findNext(nums1,nums2):
answer = {}
stack = []
for x in nums2:
while stack and stack[-1] < x:
answer[stack[-1]] = x
del stack[-1]
stack.append(x)
for x in stack:
answer[x] = -1
return [answer[x] for x in nums1]

736

被折叠的 条评论
为什么被折叠?



