【Python剑指Offer系列】 一文带你刷遍数据结构与算法题!(附67题最新解法,持续更新解法)

Python剑指Offer系列更新完毕~此系列为作者在刷题时整理,希望有所帮助!所有最新解法可关注公众号:雨云飞 回复“剑指Offer”获取。刷题链接如下~

牛客:https://www.nowcoder.com/ta/coding-interviews

Leetcode:https://leetcode-cn.com/problemset/all/

目录

数组(11)

链表(8)

栈(5)

堆(1)

哈希表(1)

二叉树(12)

二叉搜索树(3)

字符串(6)

递归(4)

回溯法(2)

位运算(2)

其他(12)


数组(11)

【剑指Offer】1.二维数组中的查找
【剑指Offer】6.旋转数组的最小数字
【剑指Offer】13.调整数组顺序使奇数位于偶数前面
【剑指Offer】26.数组中出现次数超过一半的数字
【剑指Offer】30.连续子数组的最大和
【剑指Offer】32.把数组排成最小的数
【剑指Offer】35.数组中的逆序对
【剑指Offer】37.数字在排序数组中出现的次数
【剑指Offer】40.数组中只出现一次的数字
【剑指Offer】50.数组中重复的数字
【剑指Offer】51.构建乘积数组

链表(8)

【剑指Offer】3.从尾到头打印链表
【剑指Offer】14.链表中倒数第k个结点
【剑指Offer】15.反转链表
【剑指Offer】16.合并两个排序的链表
【剑指Offer】25.复杂链表的复制
【剑指Offer】36.两个链表的第一个公共结点
【剑指Offer】55.链表中环的入口结点
【剑指Offer】56.删除链表中重复的结点

栈(5)

【剑指Offer】5.用两个栈实现队列
【剑指Offer】20.包含min函数的栈
【剑指Offer】21.栈的压入、弹出序列
【剑指Offer】44.翻转单词顺序序列
【剑指Offer】64.滑动窗口的最大值

堆(1)

【剑指Offer】29.最小的K个数

哈希表(1)

【剑指Offer】34.第一个只出现一次的字符

二叉树(12)

【剑指Offer】4.重建二叉树
【剑指Offer】17.树的子结构
【剑指Offer】18.二叉树的镜像
【剑指Offer】22.从上往下打印二叉树
【剑指Offer】24.二叉树中和为某一值的路径
【剑指Offer】38.二叉树的深度
【剑指Offer】39.平衡二叉树
【剑指Offer】57.二叉树的下一个结点
【剑指Offer】58.对称的二叉树
【剑指Offer】59.按之字顺序打印二叉树
【剑指Offer】60.把二叉树打印成多行
【剑指Offer】61.序列化二叉树

二叉搜索树(3)

【剑指Offer】23.二叉搜索树的后序遍历序列
【剑指Offer】26.二叉搜索树与双向链表
【剑指Offer】62.二叉搜索树的第k个结点

字符串(6)

【剑指Offer】2.替换空格
【剑指Offer】27.字符串的排列
【剑指Offer】43.左旋转字符串
【剑指Offer】49.把字符串转换成整数
【剑指Offer】52.正则表达式匹配
【剑指Offer】53.表示数值的字符串

递归(4)

【剑指Offer】7.裴波那契数列
【剑指Offer】8.跳台阶
【剑指Offer】9.变态跳台阶
【剑指Offer】10.矩形覆盖

回溯法(2)

【剑指Offer】65.矩阵中的路径
【剑指Offer】66.机器人的运动范围

位运算(2)

【剑指Offer】11.二进制中1的个数
【剑指Offer】12.数值的整数次方

其他(12)

【剑指Offer】19.顺时针打印矩阵
【剑指Offer】31.整数中1出现的次数(从1到n整数中1出现的次数)
【剑指Offer】33.丑数
【剑指Offer】41.和为S的连续正数序列
【剑指Offer】42.和为S的两个数字
【剑指Offer】45.扑克牌顺子
【剑指Offer】46.孩子们的游戏(圆圈中最后剩下的数)
【剑指Offer】47.求1+2+3+…+n
【剑指Offer】48.不用加减乘除的加法
【剑指Offer】54.字符流中第一个不重复的字符
【剑指Offer】63.数据流中的中位数
【剑指Offer】67.剪绳子(Python实现)
 

    作者公众号:涉及数据分析与挖掘、数据结构预算法、大数据与机器学习等内容,回复“学习资料”即可获得相关资料~

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 绪论作业答案(共50分) 一、分析如下程序中 (1)~ (10)各语句的频度。(每个1分,共10分) Ex( ) { int i , j , t ; (1) for( i=1 ; i<10 ; i++) //n = (2) printf(“\n %d” , i ); //n = (3) for(i=1; i<=2; i++) //n = (4) printf(“\n”); //n = (5) for(i=1; i<=9; i++) //n = { (6) for(j=1; j <= i ; j++) //n = { (7) t = i * j ; //n = (8) printf(“]”,t); //n = } (9) for(j=1; j 0) { if(x > 100) {x -= 10 ; y -- ;} else x ++ ; } 问if 语句执行了多少次?(2分) y--执行了多少次?(2分) x ++执行了多少次?(2分) 三、回答问(共25分) 书中16页的起泡排序如下: void bubble_sort(int a[],int n){ //将a中整数序列重新排列成自小至大有序的整数序列。 for(i=n-1,change=TRUE;i>=1&&change;--i){ change=FALSE; for(j=0;ja[j+1]{a[j]<-->a[j+1];change=TRUE; } } }//bubble_sort 1.(共15分)分析该算法的最佳情况 ,最坏情况和平均情况下各自的时间复杂度(给出分析思路与过程)。 (1) 最佳情况的时间复杂度分析(5分): (2) 最坏情况的时间复杂度分析(5分): (3) 平均情况的时间复杂度分析(5分): 2.(共10分)比较与C语言书中的起泡排序异同,并从时空效率角度说明谁更优。 四、完成如下选择(每3分,共9分)。 1. 设f为原操作,则如下算法的时间复杂度是( )。 for (i = 1; i*i=1;i--) for(j=1;jA[j+1]) A[j]与A[j+1]对换; 其中n为正整数,则算法在最坏情况下的时间复杂度为( )。 A.O(n) B.O(nlog2n) C. O(n3) D. O(n2)
1. 顺序存储结构中数据中数据元素之间逻辑关系是由( )表示的,链接存储结构中的数据元素之间的逻辑关系是由( )表示的。 A.线性结构 B.非线性结构 C.存储位置 D.针 2. 线性表是( )。 A.一个有限序列,可以为空 B. 一个有限序列,不能为空 C. 一个无限序列,可以为空 D. 一个无限序列,不能为空 3. 已知一维数组A采用顺序存储结构,每个元素占用4个存储单元,第9个元素的地址为144,则第一个元素的地址是( )。 A. 108 B. 180 C. 176 D. 112 4. 在单链表中删除针p所结点的后继结点,则执行( )。 A. p->next= p->next->next B. p->next= p->next C. p= p->next->next D. p= p->next; p->next= p->next->next 5. 若某链表最常用的操作是在最后一个结点之后插入一个结点删除最后一个结点,则采用( )存储方式最节省时间。 A. 单链表 B. 双链表 C. 头结点的双循环链表 D. 单循环链表 6.二维数组A[7][8]以列序为主序的存储, 计算数组元素A[5][3] 的一维存储空间下标 k=( )。 A. 38 B. 43 C. 26 D. 29 二、完成下列填空(每空3分,共9分)。 1.在顺序表L中第i个位置上插入一个新的元素e: Status ListInsert_Sq(SqList &L , int i , ET e){ if ( iL.length+1) return ERROR; if(L.length >= L.listsize){ p=(ET*)realloc(L.elem,(L.listsize+10)*sizeof(ET)); if (p==NULL) exit(OVERFLOW); L.elem=p; } for( j=L.length ; j>=i ; --j ) L.elem[j]=L.elem[j-1] ; L.elem[j]=e ; ++L.length ; return OK; } 2. 删除双向链表中p所向的节点算法: status delete(DuLinkList L, DuLinkList p) { if (p= =L) return ERROR; else { p->prior->next=p->next; p->next->prior=p->prior ; } free(p); return OK; } 三、编程(共27分)。 1. (共12分)用顺序表表示集合,设计算法实现集合的求差集运算,要求不另外开辟空间。 顺序表的存储结构定义如下: #define Maxsize 100 typedef struct { ElemType data[MaxSize]; // ElemType表示不确定的数据类型 int length; // length表示线性表的长度 }SqList; 将如下函数,伪码补充完整(8分),代码前先用文字描述自己的算法思想(4分)。 文字描述算法:略(4分) void Difference(SqList A, SqList B) {//参考代码如下如下(8分) for (i=0;i<A.length;i++) for(j=0;j<B.length;j++) if(A.data[i]==B.data[j]) { A.data[i]=’#’; break; } for (k=0,i=0;inext == L) return; p = L; while (p->next != L)   { if (p->next->data != e) P = p->next; else { q = p->next;p->next = q->next; free(q);} } } 时间复杂度分析:(2分) 时间复杂度为O(n)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值