随笔分类 -  剑指offer

摘要:题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少 注:存储当前数字之前的最小值,然后遍历的时候,依次计算当前值与最小值的差,最后差值数组中的最大值即为最大利润。 阅读全文
posted @ 2019-09-24 15:41 尘世中一个迷途小书童 阅读(277) 评论(0) 推荐(0)
摘要:题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求这个圆圈里剩下的最后一个数字。 注:约瑟夫环问题,使用环形链表模拟求出最后剩下的一个节点,即p==p.next时的节点。 阅读全文
posted @ 2019-09-24 15:33 尘世中一个迷途小书童 阅读(174) 评论(0) 推荐(0)
摘要:题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。 注:1、统计数组中0的个数,即大小王的个数 2、对数组进行排序 3、遍历数组,统计数组非0部分的间隔和。如果遇到有相邻相同的即表示不能组成连续的数组,返回False 4、最后与0 的个数进行比较,如果小于等于0的个数即连续, 阅读全文
posted @ 2019-09-24 15:26 尘世中一个迷途小书童 阅读(235) 评论(0) 推荐(0)
摘要:题目:字符串左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请实现左旋转操作。 注:主要思路是采用3次旋转,第一次字符串全部旋转;第二次前半部分旋转,以指定的n为分界点,此时旋转一次后的分界点变为len(s)-n;第三次后面部分旋转。 阅读全文
posted @ 2019-09-18 10:21 尘世中一个迷途小书童 阅读(109) 评论(0) 推荐(0)
摘要:题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。标点符号和普通字母一样处理。 注:采用的思想为两次翻转。先全部翻转,然后根据空格分隔的每个单词进行第二次翻转。由于Python里string不可变,所以要通过列表来进行操作。 阅读全文
posted @ 2019-09-18 10:10 尘世中一个迷途小书童 阅读(156) 评论(0) 推荐(0)
摘要:题目:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。 注:也是使用两个指针,只是这次在同一侧,向后侧移动,如果当前两个指针之内的数的和小于目标值,则后面指针右移;如果和大于目标值,则前面指针右移;如果和与目标值相等则加入保存的列表。优化提前终止为,前面指针大于目标值的一半时即可终 阅读全文
posted @ 2019-09-17 22:24 尘世中一个迷途小书童 阅读(159) 评论(0) 推荐(0)
摘要:题目:输入一个递增排序的数组和一个数字s,在数组中找查找两个数,使他们的和正好为s。如果有多对,输出任意一对即可。 注:由于是有序数组,采用前后两个指针往中间走的方式,如果两个数的和小于目标,前指针后移,反之,后指针前移。代码中增加了优化,如果目标值大于两倍的后指针或小于两倍的前指针则数组中不会存在 阅读全文
posted @ 2019-09-17 22:03 尘世中一个迷途小书童 阅读(232) 评论(0) 推荐(0)
摘要:题目:一个整型数组里除两个数字之外,其他数字都出现了两次。请找出这两个只出现一次的数字。时间复杂度O(n),空间复杂度O(1)。本题代码部分是简化版,只有一个数字出现了一次,其他都是两次。 注:使用异或运算。运用异或的特点:一个数和0异或还是它本身;一个数和自己异或为0。有两个出现一次的问题,需要先 阅读全文
posted @ 2019-09-17 21:53 尘世中一个迷途小书童 阅读(131) 评论(0) 推荐(0)
摘要:题目:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左、右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 注:求出左右子树的深度,然后求差,判断差是否否和平衡条件。一直遍历到叶子结点,如果其中任何一个节点不平衡即返回False。 阅读全文
posted @ 2019-09-17 15:57 尘世中一个迷途小书童 阅读(156) 评论(0) 推荐(0)
摘要:题目:给定一棵二叉搜索树,请找出其中第K大的节点。 注:采用中序遍历,遍历完成后取出第K个。官方给出的方案是直接取到第K个节点就停止,目前没看明白,后期会优化。 阅读全文
posted @ 2019-09-17 15:16 尘世中一个迷途小书童 阅读(147) 评论(0) 推荐(0)
摘要:题目:假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请找出数组中任意一个数值等于其下标的元素。 注:使用二分查找,当中间的数和索引相同时,返回值,结束;当中间值小于索引时,begin指向中间值+1;当中间值大于索引时,end指向中间值-1。 阅读全文
posted @ 2019-09-10 21:09 尘世中一个迷途小书童 阅读(180) 评论(0) 推荐(0)
摘要:题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 注:使用二分查找的方式,如果中间的数与索引相同,说明缺失的数字在右边,让begin指向这个位置;如果中间的数与索引不相同,说明 阅读全文
posted @ 2019-09-10 21:02 尘世中一个迷途小书童 阅读(148) 评论(0) 推荐(0)
摘要:题目:数字在排序数组中出现的次数。输入为一个排序数组和一个数字。 注:一般解决方式为利用字典统计各个数字出现的次数或者用二分法查找到其中一个目标数字,然后前后再前后查找。这两种方式的时间复杂度都为O(n)。 O(lgn)的方法为使用两次二分查找,第一次查找目标数字第一次出现的位置,第二次查找其最后一 阅读全文
posted @ 2019-09-10 20:36 尘世中一个迷途小书童 阅读(152) 评论(0) 推荐(0)
摘要:题目:输入两个链表,找出它们的第一个公共节点。 注:要找出两个链表第一个公共节点,只要让两个链表在各自某个节点之后长度一致,然后一起往后遍历,当遇到两个节点相同时,即为第一个公共节点。所以首先算出两个链表的长度,然后让长的链表先走,使其剩余长度等于另一个链表,然后一起遍历即可。 第二种方法为用两个栈 阅读全文
posted @ 2019-09-10 20:24 尘世中一个迷途小书童 阅读(138) 评论(0) 推荐(0)
摘要:题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对。 注:官方给的方法是利用归并排序,时间复杂度为O(nlgn)。本文给出自己的方法,时间复杂度为O(n2),有待改进,但是实现很简洁。先对数组排序,利用内置的排序函数。然后依次遍 阅读全文
posted @ 2019-09-10 20:05 尘世中一个迷途小书童 阅读(105) 评论(0) 推荐(0)
摘要:题目:字符串中第一个只出现一次的字符。 注:遍历两次字符串。第一次用字典统计各个字符出现的次数,第二次遍历输出value值为1的key。 阅读全文
posted @ 2019-09-09 22:54 尘世中一个迷途小书童 阅读(98) 评论(0) 推荐(0)
摘要:题目:我们把只包含因子2、3和5的数称作为丑数。求按从小到大的顺序的第1500个丑数,习惯上我们把1作为第一个丑数。 注:为了利用之前计算的丑数,使用一个列表存储要计算的丑数。使用3个指针分别代表之前的丑数乘以2,3,5刚好大于当前列表最后一个丑数的位置。要添加的新的丑数即为3个指针所指的丑数分别乘 阅读全文
posted @ 2019-09-09 22:51 尘世中一个迷途小书童 阅读(154) 评论(0) 推荐(0)
摘要:题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含‘a’~'z'的字符。 注:使用动态规划的思想。存储到当前字符最长的不重复字符串。当判断下一个字符时,分两种情况: 1、如果下个字符在前一个最长不重复字符串没出现过,直接加入最长字符串 2、如果下个 阅读全文
posted @ 2019-09-06 10:41 尘世中一个迷途小书童 阅读(150) 评论(0) 推荐(0)
摘要:题目:在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格,直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 注:使用动态规划的思想,状态方程为:f(i,j)=max(f 阅读全文
posted @ 2019-09-06 10:04 尘世中一个迷途小书童 阅读(177) 评论(0) 推荐(0)
摘要:题目:给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成“a”,1翻译成“b”,...,25翻译成“z”。一个数字可能有多个翻译。请实现一个函数,计算一个数字有多少种不同的翻译方法。 注:使用动态规划的思想。f[i]=f[i+1]+g[i,i+1]f[i+2],g[i,i+1]为第i,i+1位 阅读全文
posted @ 2019-09-05 16:57 尘世中一个迷途小书童 阅读(164) 评论(0) 推荐(0)