![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
努力上进的云同学
当你觉得目前的状况配不上自己的理想时,就静下心来读书学习吧!
展开
-
【数组】井字游戏
题目:设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中字符” "代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(" “)中。第一个玩家总是放字符"O”,且第二个玩家总是放字符"X"。"X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。当有N个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,对应该字符的玩家获胜。当所有位置非空时,也算为游戏结束。如果游戏结束,玩家不允许再放置字符。如果游戏存转载 2020-06-25 13:42:52 · 619 阅读 · 0 评论 -
【链表】翻转链表~还没看懂
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000思路:思路1:使用迭代进行计算,直接将链表存储到列表中class Solution: def reverseList(self, head): if not head:原创 2020-06-23 14:40:51 · 189 阅读 · 0 评论 -
【位运算】数组中出现次数超过一半地数字
题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2思路1:使用字典存储数字和出现的次数其实每次出现这种有关统计次数的我都会想到用字典。步骤如下:遍历数组,如果该数字没在字典中,就存入字典,在字典中,就把给val加1然后接着判断它的数量是否大于整个数组的一半就可以,是的话,直接返回数值,否则继续遍历。时间复杂度:O(n)空间复杂度:O原创 2020-06-23 14:15:19 · 210 阅读 · 0 评论 -
【位运算】二进制1的个数
题目描述请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。方法一:直接使用bin()转化成二进制,然后使用count统计1的个数空间复杂度:O(n)时间复杂度:O(1)class Solu原创 2020-06-23 13:41:07 · 199 阅读 · 0 评论 -
【链表】复杂链表的复制
题目:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。例子:思路:暂时没有...原创 2020-06-23 12:37:47 · 203 阅读 · 0 评论 -
【链表】两个链表的第一个公共节点
题目:输入两个链表,找出它们的第一个公共结点。相交,指的是从这个节点开始,后边的值都一样。没有相交返回null即可。注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。在这里我其实有个迷惑,他这个题可能会出现两种情况。(1)两个链表相当于两个相交线,只有一个相交的节点。(2)就是图示的那样,从一个交点开始,后边的值都一样,类似树分叉一样。我在这里按照第二种理原创 2020-06-17 16:00:58 · 178 阅读 · 0 评论 -
【链表】链表中倒数第k个节点
题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.思路:第一次思路:两次遍历:第一次遍历计算出链表的长度。第二次遍历时计算出一次遍历:第二次思路:定义一个列表遍历链表,将链原创 2020-06-08 10:43:37 · 219 阅读 · 0 评论 -
【链表】删除链表的节点
题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之原创 2020-06-08 21:09:23 · 657 阅读 · 0 评论 -
牛客网刷题
1、某高校计算机学院要新建3个实验室,每个实验室有25台主机,已申请了一个C类地址192.168.10.0,该C类地址的子网掩码为()255.255.255.224解析:地址总共32位,c类地址默认掩码24位,也就是32位前面24个1,最后8位用于子网断。25个ip需要至少5个位表示,最后8位剩下前3位用于表示网段。所以最后八位1110 0000,转成十进制2242、MTU与分...原创 2020-04-07 11:49:23 · 1232 阅读 · 1 评论 -
【数组】0~n-1中缺失的数字
题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2解题思路:排序数组中的搜索问题,首先想到 二分法 解决。设置两个指针,i和j分别指向列表首尾使用(i+j)//2查看该值是否等于数组中的元素,等于的话,则缩小范围,在右半边否则,在左半边,然后进行该循环。直到首尾指针交换位置,结束循环class Solution:转载 2020-05-14 22:47:43 · 195 阅读 · 0 评论 -
【数组】顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]解题思路:顺时针即:从第一行第一列开始,顺时针绕圈开始打印数字。...转载 2020-05-14 20:33:06 · 417 阅读 · 0 评论 -
【数组】二维数组中的查找
二维数组中的查找题目:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 t原创 2020-05-14 20:08:18 · 129 阅读 · 0 评论 -
【数组】数组中重复的数字
数组中重复的数字第一次的思路:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000第一次的思路:直接使用count函数,进行统计,遇到出现次数不为1的直接输出即可。【问题】:超过了限定的时间python原创 2020-05-10 23:10:25 · 364 阅读 · 0 评论 -
【数组】在排序数组中查找数字
题目说明:统计一个数字在排序数组中出现的次数。示例 1:示例 1:输入: nums= [5,7,7,8,8,10],target=8输出: 2思路:直接使用count函数即可class Solution(object): def search(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int原创 2020-05-10 22:26:26 · 163 阅读 · 0 评论 -
【字符串】表示数值的字符串
题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。思路:刚开始没有思路阿~~就没有!!!好多判断条件感觉比如说,假如第一个符号为‘+’或‘-’时,后边再不能出现符号。如果有...原创 2020-05-06 20:23:26 · 627 阅读 · 0 评论 -
【字符串】把字符串转换成整数
题目:写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串...原创 2020-05-05 13:45:41 · 1988 阅读 · 0 评论 -
【字符串】字符流中第一个不重复的字符
题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。思路:由于该字符流长度不确定,所以存到列表中进行操作,比较方便。在此第一反应就是使用字典,...原创 2020-05-05 13:11:32 · 203 阅读 · 0 评论 -
【字符串】左旋转字符串
题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 :输入: s = "abcdefg", k = 2输出: "cdefgab"限制: 1 <= k < s.length <= 10000...原创 2020-05-05 12:15:19 · 290 阅读 · 0 评论 -
【字符串】替换空格
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:使用python的分离拼接函数即可# -*- coding:utf-8 -*-class Solution: def replaceSpace(self, s): return '%...原创 2020-05-05 10:09:45 · 132 阅读 · 0 评论 -
【字符串】反转单词顺序
一、字符串1、反转单词顺序输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "...原创 2020-05-05 10:06:18 · 1358 阅读 · 0 评论