python编程300例-day02

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] 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值