算法刷题

it2023-09-25  76

参考网址:https://wx.zsxq.com/dweb2/login

##/*-------------------------------------*/ ##/* 从 0 学算法第一周总结:1 万字 30 多幅图 ##/*https://mp.weixin.qq.com/s/Ay-N6S920BosVqvpSgGrfg ##/*-------------------------------------*/ """ 1 星球使用方法 2 程序员还需要学算法吗? 3 从零学算法大纲 Day 1 冒泡排序 1.1 学习算法需要什么基础 1.2 算法入门参考资料 1.3 算法进阶参考资料 1.4 算法入门最基本思路 1.5 今日打卡题 1.6 精选回答 Day 2: 选择排序 2.1 作业点评 2.2 今日打卡题 2.3 精选回答 2.3 作业点评 Day 3:什么是一个算法? 3.1 今日打卡题 3.2 精选回答1 3.3 精选回答2 3.4 精选回答3 3.5 参考资料 Day 4:Hailstone 练习题 4.1 今日打卡题 4.2 精选回答 1 4.3 精选回答 2 4.4 Collatz 猜想 Day 5:数组中插入元素 5.1 今日打卡题 5.2 精彩回答 Day 6 :LeetCode 求中心索引 6.1 今日打卡题 6.2 精彩回答 6.3 不高效解 6.4 算法分析总结 Day 7 :如何培养算法思维? 7.1 经历描述 7.2 经验总结 7.3 追求目标 7.4 精选回答 Day 8 :两数之和 8.1 今日打卡题 8.2 精选回答 8.3 分析总结 8.4 不高效解 1 8.5 不高效解 2 Day 9:什么是哈希表? 9.1 今日打卡题 9.2 精彩回答 """ ##/*-------------------------------------*/ ##/* 小白入门必看,最详细的循环神经网络介绍! ##/*https://mp.weixin.qq.com/s/phz1EPjPIqoyj6fM-eH_iw ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Python 求中心索引,第二种方法不可取! ##/*https://mp.weixin.qq.com/s/Bz0qd_Z6ul8_qmq40MzOUw ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 1 冒泡排序 ##/*https://mp.weixin.qq.com/s/hnCnIPAIUydqxCOJD0Lxiw #https://wx.zsxq.com/dweb2/index/group/init 【作业汇总】 ##/*-------------------------------------*/ import numpy as np def bubble_sort(our_list): ''' Function: 将列表从小到大排列 Parameters: sortborder,记录需要交换的最后元素位置,此位置元素以排好序,不需要遍历 lastexchangeindex, 每次遍历会将最大元素放到最后,故每次最后的元素不需要再和其他值对比 Return:经过标准化的数据 ''' n=len(our_list) lastexchangeindex=0 #记录最后一次交换元素的位置 sortborder=n-1 #无序数列边界 for i in range(n): flag=True for j in range(0,sortborder): if our_list[j]>our_list[j+1]: our_list[j],our_list[j+1]=our_list[j+1],our_list[j] flag=False #有元素交换,则将标记置为False lastexchangeindex=j sortborder=lastexchangeindex if flag: break return our_list #try our_list=list(np.random.randint(100, size=5)) our_list=[62, 78, 18, 45, 6] print(our_list) n=len(our_list) lastexchangeindex=0 #记录最后一次交换元素的位置 sortborder=n-1 #无序数列边界 for i in range(n): flag=True for j in range(0,sortborder): print("j:{}".format(j)) if our_list[j]>our_list[j+1]: print(our_list[j],our_list[j+1]) our_list[j],our_list[j+1]=our_list[j+1],our_list[j] flag=False #有元素交换,则将标记置为False lastexchangeindex=j print("flag:",flag,"lastexchangeindex:{}".format(lastexchangeindex),"our_list:",our_list) print("*"*30) sortborder=lastexchangeindex if flag: break print("i:{}".format(i)) print("-"*30) [62, 78, 18, 45, 6] [62, 18, 78, 45, 6] [62, 18, 45, 78, 6] [62, 18, 45, 6, 78] ##/*-------------------------------------*/ ##/* Day 2: 选择排序 ##/*https://articles.zsxq.com/id_xc6xtdw3wn6o.html ##/*-------------------------------------*/ def select_fun(list1): n = len(list1) count = 0 # 统计更改次数 for i in range(n-1): # 开启循环,只需要循环n-1次即可, min_index = i for j in range(i+1, n): # j 输入i后面的数字 if list1[j] < list1[min_index]: # 如果发现后面存在比最小值档还小的数 min_index = j # 这里暂时不更改位置,等循环结束后再更改 if min_index != i: # 判断当前的最小值是不是i所在位置 list1[i], list1[min_index] = list1[min_index], list1[i] count += 1 print('交换次数', count) return list1 if __name__ == '__main__': list2 = [3, 5, 6, 1, 2] print(select_fun(list2)) list1 = [3, 5, 6, 1, 2] n = len(list1) count = 0 # 统计更改次数 for i in range(n-1): # 开启循环,只需要循环n-1次即可, min_index = i print(min_index,i) for j in range(i+1, n): # j 输入i后面的数字 print(j,list1[j],list1[min_index],list1[j] < list1[min_index]) if list1[j] < list1[min_index]: # 如果发现后面存在比最小值档还小的数 min_index = j # 这里暂时不更改位置,等循环结束后再更改 print("min_index:",min_index) print("*"*5) if min_index != i: # 判断当前的最小值是不是i所在位置 print(list1) list1[i], list1[min_index] = list1[min_index], list1[i] print(list1) count += 1 print("-"*30) print('交换次数', count) """ 用Python实现常见的四种排序算法 https://baijiahao.baidu.com/s?id=1635285231673698375&wfr=spider&for=pc """ #/*-------------------------------------*/ #1. 快速排序 #/*-------------------------------------*/ def quicksort(seq): if len(seq)<2: return seq else: base=seq[0] left =[elem for elem in seq[1:] if elem<base] right=[elem for elem in seq[1:] if elem>base] return quicksort(left)+[base]+quicksort(right) seq=[9,8,7,6,5,4,3,2] random.shuffle(seq) print(quicksort(seq)) base=seq[0] left =[elem for elem in seq[1:] if elem<base] right=[elem for elem in seq[1:] if elem>base] #---左边left试图理解start--- seq_s=seq[1:] i_list=[] for i in range(len(seq_s)): if seq_s[i]>base: i_list.append(seq_s[i]) for j in i_list: seq_s.remove(j) print(seq_s) #---左边left试图理解end--- #/*-------------------------------------*/ #2. 冒泡排序 #/*-------------------------------------*/ def bouble_sort(sequence): seq=sequence[:] length=len(seq)-1 i=j=0 flag=1 while i <length: j=0 while j <length-i: if seq[j]>seq[j+1]: seq[j],seq[j+1]=seq[j+1],seq[j] flag=0 j+=1 if flag: break i+=1 return seq seq=[9,8,7,6,5,4,3,2] random.shuffle(seq) print(seq) #试图理解 length=len(seq)-1 i=j=0 flag=1 while i <length: print("start:",i,j,flag,seq) j=0 while j <length-i: print("middd:",i,j,flag,seq) if seq[j]>seq[j+1]: seq[j],seq[j+1]=seq[j+1],seq[j] flag=0 print("ififi:",i,j,flag,seq) j+=1 if flag: break i+=1 print("enden:",i,j,flag,seq) print("*"*30) #/*-------------------------------------*/ #3. 选择排序 #/*-------------------------------------*/ def find_minimal_index(seq): min_elem=seq[0] count=0 min_elem_index=count for elem in seq[1:]: count+=1 if elem<min_elem: elem,min_elem=min_elem,elem min_elem_index=count return min_elem_index def select_sort(sequence): #选择排序 seq=sequence[:] length=len(seq) for i in range(length): index=find_minimal_index(seq[i:]) seq[index+i],seq[i]=seq[i],seq[index+i] return seq #试图理解 seq=[9,8,7,6,5,4,3,2] random.shuffle(seq) print(seq) length=len(seq) for i in range(length): index=find_minimal_index(seq[i:]) seq[index+i],seq[i]=seq[i],seq[index+i] #min_elem_index min_elem=seq[0] count=0 min_elem_index=count for elem in seq[1:]: print("start:",count,min_elem_index,elem) count+=1 if elem<min_elem: elem,min_elem=min_elem,elem min_elem_index=count print("ififi:",count,min_elem_index,elem) print("*:"*30) #/*-------------------------------------*/ #4.插入排序 #/*-------------------------------------*/ #插入排序 def insert_sort(lists): count=len(lists) for i in range(1,count): key=lists[i] j=i-1 while j>=0: if lists[j]>key: lists[j+1]=lists[j] lists[j]=key j-=1 return lists #试图理解 seq=[9,8,7,6,5,4,3,2] #insert_sort(seq) count=len(seq) for i in range(1,count): key=seq[i] print("i:",i,"key:",key) j=i-1 while j>=0: print("j:",j,"seq[j]:",seq[j]) if seq[j]>key: seq[j+1]=seq[j] seq[j]=key print(seq) j-=1 print("-"*30) #/*-------------------------------------*/ ''' 用于获取接近某个值的列表 https://www.jianshu.com/p/764ccdd12171 ''' #/*-------------------------------------*/ def ls_to_int(ls): ''' 将列表字符元素转换为整数并排序 :param ls:需要转换的列表 :return:转换后的列表 ''' ls = list(map(int, ls)) ls = list(sorted(ls, reverse=True)) return ls def remove_ls(ls, ls_add): ''' 去除找到的元素 :param ls: 原表 :param ls_add: 原表中提取的一部分数值组成的新列表 :return: 去除ls_add后的ls ''' for i in range(len(ls_add)): remove_value = ls.index(ls_add[i]) ls.pop(remove_value) return ls def get_ls_equal_num(ls, num): ''' 获取一个列表中的一组数,让他们相加的结果接近于给定数 :param ls: 列表 :param num: 接近值 :return: 排序在前的,并接近给定值的一组数列表 ''' ls_add = [] x = 0 for i in range(len(ls)): # print('-' * 30 + str(i)) x = sum(ls_add) # print('x的当前值{}'.format(x)) if x > num: ls_add.remove(ls[i - 1]) # print('弹出的值{}'.format(ls[i - 1])) ls_add.append(ls[i]) # print('加入当前的ls[i]值{}'.format(ls[i])) # 判断最后一个值 if sum(ls_add) > num: ls_add.pop() return ls_add ls = ['1', '30', '30', '30', '30', '1', '27', '23', '1', '17', '15', '11', '9', '7', '6', '2', '2', '2', '1', '1'] print(ls) def get_all_close2num(ls): ''' 获取所有接近30的列表 :param ls: 需要查找的列表 :return: 所有接近值列表的列表 ''' ls = ls_to_int(ls) ls_ = [] while len(ls) > 0: ls_add = get_ls_equal_num(ls, 30) # print(ls_add) ls_.append(ls_add) ls = remove_ls(ls, ls_add) return ls_ ls = get_all_close2num(ls) print(ls) ##/*-------------------------------------*/ ##/* Day 3:什么是一个算法? ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 4:Hailstone 练习题 ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 5:数组中插入元素 ##/* ##/*-------------------------------------*/ """ Day5 #自实现数组元素插入# 1、下标处理:正/负数绝对值大于数组长度则添加在数组末尾和首位,负数绝对值小于数组长度则用index+len(list)来处理 2、None值判断及优化:若插入位置刚好是None值,则直接替换 (PS:元素的插入需要考虑扩容问题,如果原本数组已满,则需要扩容。实际上许多API底层也是用最原始的方式去实现的,只是封装起来了就成了方便调用的API,建议可以的话尝试自己的方式去实现;顺便想下,如果把它封装起来需要优化哪些地方。) """ ##/*-------------------------------------*/ ##/* Day 6 :LeetCode 求中心索引 ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 7 :如何培养算法思维? ##/*https://t.zsxq.com/EiiayVf ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 8 :两数之和 ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 9:什么是哈希表? ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 9 :什么是哈希表? ##/*https://mp.weixin.qq.com/s/vwpUVwSY05z4H_5wq8utNw ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day11 作业帖:宝石与石头 https://t.zsxq.com/A6AEyZ3 ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 14 作业题:反转单链表 ##/*https://articles.zsxq.com/id_0d6nfhcogdft.html #3种方法,3幅图,1个gif,把它讲的明明白白 #https://mp.weixin.qq.com/s/MmR8E6fWjyY9jlVjb-IHUA ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 16:算法时间复杂度举例 ##/*https://mp.weixin.qq.com/s/-ym9vBW2ZAUM44n45hH2Pw ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day10-Day17的算法刷题精华周报发出来了,大家觉得有帮助,能给振哥点个在看或分享朋友圈吗?谢谢。 ##/*https://mp.weixin.qq.com/s/HG7qiJLFleHo-vGkFFOqzQ ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Python 100例 ##/*https://mp.weixin.qq.com/s/h2BtBadqLRtI26bcTR1nqQ ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 18:二分查找算法 ##/*https://mp.weixin.qq.com/s/yr1fHmZ4vk_rRviCryUwsw ##/*https://mp.weixin.qq.com/s/2QxBdypiyQHZGBGvWlZ19g ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 19:合并两个有序数组 ##/*https://mp.weixin.qq.com/s/4Z33sNW_hoNok3R3_wFDeQ ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day20 作业:写出归并排序算法 ##/*https://mp.weixin.qq.com/s/AzhAeGZtJErn-Qo97xlrQQ ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Day 22 :使用递归以相反的顺序打印字符串 ##/*https://mp.weixin.qq.com/s/gj_rDw-R9tJ30vfqwhTSMg ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* Pandas 数据分析: 3 种方法实现一个实用小功能 ##/*https://mp.weixin.qq.com/s/r5hLb0ctOYervjePi6wLLg ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/ ##/*-------------------------------------*/ ##/* ##/* ##/*-------------------------------------*/

 

最新回复(0)