1骏融、冒泡排序
# 冒泡排序
# 思路:前后進行對比链嘀,如從小到大進行排列,i循環(huán)是大循環(huán)次數(shù)档玻,比len小1即range(len(li))
# j的循環(huán)是為了前后比大小怀泊,把大的放倒數(shù)第一第二,所以次數(shù)會減少误趴,因為大的已經(jīng)放到后面了霹琼,所以為range(len(li)-i-1)
def maopao(li):
for i in range(len(li)):
for j in range(len(li)-i-1):
if li[j]>li[j+1]:
li[j],li[j+1] = li[j+1],li[j]
return li
2、二分查找
'''二分查找
在有序數(shù)組中查找元素
思路:永遠跟中間值進行比較冤留,比中間值小向左區(qū)間找right=middle-1
比中間值大向又區(qū)間找left=middle+1碧囊,直到middle=k結(jié)束
'''
def erFenDiGui(li,k,left,right):
# 遞歸結(jié)束
if left > right:
return -1
# 找區(qū)間中間值,向下取整
middle = (left + right) // 2
# 最終找到返回中間值停止循環(huán)
if k == li[middle]:
return middle
# 比中間值小纤怒,向左區(qū)間進行
elif k < li[middle]:
return erFenDiGui(li,k,left,middle - 1)
# 比中間值大糯而,向右區(qū)間進行
else:
return erFenDiGui(li,k,middle +1,right)
3、判斷回文:
解法一(切片)泊窘、
# 回文
# 思路:1熄驼、切片反轉(zhuǎn)跟原字符串對比
# 用到函數(shù):i.isalpha()————是否為字母
# i.isdigit()————是否為數(shù)字
# i.lower()轉(zhuǎn)換成小寫字母
# s_new[::-1]切片,反轉(zhuǎn)字符串
def huiWen01(s):
s=s.lower()
s_new = ''
# 提取數(shù)字和字母全轉(zhuǎn)小寫
for i in s:
if i.isalpha():
s_new = s_new + (i)
if i.isdigit():
s_new = s_new + (str(i))
if s_new == s_new[::-1]:
return True
else:
return False
解法二(雙指針)
# 回文:雙指針做法
# 左右兩個指針烘豹,循環(huán)用while瓜贾,當(dāng)left<right時
# 記一個高端寫法: s = [ch.lower() for ch in s if ch.isalnum() // 一句話剔除除字母數(shù)字外的字符并轉(zhuǎn)為小寫
def huiWen02(s):
if len(s)<=1:
return True
s = s.replace(' ','').lower()
# s = [ch.lower() for ch in s if ch.isalnum()]
left,right = 0,len(s)-1
while left < right:
if s[left] == s[right]:
left +=1
right -=1
elif not s[left].isalnum():
left +=1
elif not s[right].isalnum():
right -=1
return True
4、基于排列構(gòu)建數(shù)組
# 基于排列構(gòu)建數(shù)組
# 給你一個 從 0 開始的排列 nums(下標也從 0 開始)携悯。
# 請你構(gòu)建一個 同樣長度 的數(shù)組 ans 祭芦,其中,對于每個 i(0 <= i < nums.length)憔鬼,
# 都滿足 ans[i] = nums[nums[i]] 龟劲。返回構(gòu)建好的數(shù)組 ans
# 知識點:高級寫法一句話:return [nums[nums[_]] for _ in range(len(nums))]
def new_ans(nums):
ans = []
for i in range(len(nums)):
ans.append(nums[nums[i]])
return ans
# return [nums[nums[_]] for _ in range(len(nums))]
5、數(shù)組串聯(lián)
知識點:extend()和+的區(qū)別:https://www.cnblogs.com/liusijun113/p/10263093.html
# 數(shù)組串聯(lián)
# 給你一個長度為 n 的整數(shù)數(shù)組 nums 轴或。請你構(gòu)建一個長度為 2n 的答案數(shù)組 ans 昌跌,數(shù)組下標 從 0 開始計數(shù) ,
# 對于所有 0 <= i < n 的 i 照雁,滿足下述所有要求:
# ans[i] == nums[i]
# ans[i + n] == nums[i]
# 具體而言蚕愤,ans 由兩個 nums 數(shù)組 串聯(lián) 形成。
# 返回數(shù)組 ans
# 知識點:nums.extend(nums); return nums
def shuZuChuanLian(nums):
# return [nums[_] for _ in range(len(nums))]
return nums+nums