剑指offer
饥渴的小苹果
很天然牛奶糖然后天然 很天然天然图画
展开
-
【剑指offer】12.剪绳子
题目描述给你一根长度为n的绳子,请将绳子剪为m段(m、n都是大于1的整数)。每段绳子的长度记为k[0],k[1],…k[m]。请问k[0]*k[1] *…*k[m]最大值是多少?例如8可以剪为2、3、3的3段。 最大乘积为2 * 3 * 3 = 18LeetCode343. 整数拆分动态规划如果面试题是求一个问题的最优解(通常是最大值或最小值),并且该问题能够分解为若干个子问题,并且...原创 2019-03-05 15:26:47 · 199 阅读 · 0 评论 -
【剑指offer】二进制中1的个数
考察一个无符号数中二进制的个数,本体考虑使用位运算.与剑指offer上的题目类似,需要注意的是对无符号数进行处理,应该使用>>>而不是>>判断最后一位的奇偶使用 a&1移位使用>>>Code public int hammingWeight(int n) { int count=0; while(n!=0){ ...原创 2019-03-20 11:34:33 · 92 阅读 · 0 评论 -
【剑指offer】幂函数
拿到题目之后,首先进行分析。这里的幂可以是正数也可以是负数。负数需要取个倒数。明白之后,开始写代码超时解法 public double myPow(double x, int n) { double res = 1.0; //正数和负数分别进行判断 if(n>0) { for (int i = 1; i <...原创 2019-03-20 11:33:54 · 415 阅读 · 0 评论 -
【剑指offer】删除链表中重复的节点
public ListNode deleteDuplicates(ListNode head) { ListNode current = head; //判断条件是当前节点以及下一个节点都不能为空 while(current!=null && current.next!=null ){ //如果当前节点的...原创 2019-03-20 11:32:40 · 112 阅读 · 0 评论 -
【剑指offer】奇数位于偶数前面
调整数组顺序使偶数位于奇数前面解法分析扫描这个数组的时候,如果发现有偶数出现在奇数的前面,则交换它们的顺序。双指针法维护两个指针。一个指针初始化时指向第一个数字,他只向后移动。另一个指针初始化指向最后一个指针,他只向前移动。两个指针相遇之前,,第一个指针总是位于第二个指针前面。如果第一个指针指向的数字是偶数,并且第二个指针指向的是奇数则交换这两个数字Code public int...原创 2019-03-20 11:31:39 · 182 阅读 · 0 评论 -
【剑指offer】对称的二叉树
判断一个数是不是对称的二叉树递归可以通过二叉树的前序遍历序列和对称前序遍历是否相等来判断二叉树是否是对称的。Codepublic boolean isSymmetric(TreeNode root) { return isMirror(root, root);}public boolean isMirror(TreeNode t1, TreeNode t2) { /...原创 2019-03-20 11:30:47 · 132 阅读 · 0 评论 -
【剑指offer】13二进制中1的个数
位运算位运算是数字用二进制表示之后,对每一位上0或1的运算。位运算一共有5种运算:与或异或左移右移左移运算符m&lt;&lt;n表示把m左移n位。在左移的时候,最左边的n位将会被丢弃,同时在最右边补上n个0。比如00001010&lt;&lt;2=0010100010001010&lt;&lt;3=01010000右移运算符表示把m右移n位。在右移的时候,最右边的...原创 2019-03-07 14:16:41 · 290 阅读 · 0 评论 -
【剑指offer】11.矩阵中的路径(单词搜索)
题目LeetCode链接分析这是一个可以用回溯法解决的典型题。判断是否存在指定的单词,也就是判断是否有一条为对应word的路径首先在矩阵中任选一个格子作为路径的起点。如果矩阵中的该格子恰好是word中的第i个字符。那么到相邻的格子上寻找路径上的第i+1个字符。除了矩阵边界上的格子,每个都有四个相邻的格子。重复这个过程直到路径上的所有字符都在矩阵中找到相应的位置由于回溯的递归特性,路径...原创 2019-03-04 20:15:01 · 391 阅读 · 0 评论 -
【剑指offer】10.旋转数组的最小数字
LeetCode链接地址直观解法并不难。从头到尾遍历数组,就能找到最小元素。但是时间复杂度是O(N),但是没有用到旋转数组的特性。二分查找解法注意到旋转之后的数组分为了两个有序的子数组。且前面的元素都大于或等于后面的子数组。而且最小值正好是两个子数组的分界线。考虑二分查找。用两个指针分别指向数组的第一个元素和最后一个元素。(第一个元素应该大于等于最后一个元素)然后寻找中间的元素。如...原创 2019-03-03 15:36:12 · 129 阅读 · 0 评论 -
【剑指Offer】第4题-二维数组的查找-Python
一、题目:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。Leetcode对应题目:Search a 2D ...原创 2019-01-02 21:13:58 · 176 阅读 · 0 评论 -
【剑指Offer】第5题-替换空格-Python
题目介绍解法一:O(n2)O(n^2)O(n2)算法最直观的解法是从头到尾扫描字符串,每次遇到空格替换。需要把后面的字符向后移动两个字符。假设字符串的长度是n,对每个空格字符需要移动后面O(n)个字符,因此对含有O(n)个空格的字符串的移动效率是O(n2)O(n^2)O(n2)code用python字符串的replace方法。对空格split得到list,用‘%20’连接(join...转载 2019-02-24 21:19:32 · 284 阅读 · 0 评论 -
【剑指Offer】第6题-从尾到头打印链表-Python
LeetCode对应的LeetCode题目如下:206. 反转链表解法一:栈算法首先遍历链表,遍历的顺序从头到尾,可输出的顺序却是从尾到头,这就是典型的后进先出,我们可以用栈实现。每经过一个节点,把该节点放到栈中,遍历完之后再从栈顶开始输出。code def reverseList(self, head): &amp;amp;quot;&amp;amp;quot;&amp;amp;quot; :type he原创 2019-02-24 23:04:17 · 595 阅读 · 0 评论 -
【剑指Offer】第8题-用栈实现队列-Python
LeetCode232. 用栈实现队列题目分析栈的特点是先入后出,即最后被压入(push)栈的元素第一个弹出(pop)。队列的特点是先入先出,即第一个进入队列的元素第一个出来。虽然栈和队列是两个针锋相对的数据结构,但是却可以相互联系。本题的意思是想要通过两个栈来实现队列。通过一个具体的例子来说明往队列中插入元素的过程。首先插入一个元素a,不妨先把它插入到stack1,此时stack...原创 2019-02-27 00:00:31 · 119 阅读 · 0 评论 -
【剑指Offer】第8.5题-用队列实现栈-Python
用两个队列实现一个栈。LeetCode225. 用队列实现栈思路分析通过一系列的栈的压入弹出操作来分析。首先往栈内压入一个元素,由于两个队列都是空的。不妨把数据插入queue1。接下来继续压入b,c。这时queue1包含{a,b,c}。其中a位于队列头部。现在考虑从栈中弹出一个元素,根据栈的后入先出元素,应该弹出c。不过c位于queue1尾部。可以先从queue1中依次删除元素a,b并...原创 2019-02-27 01:22:23 · 162 阅读 · 1 评论 -
【剑指Offer】第9题-斐波那契数列-Python
解法一 递归通常用递归的解法会比较简洁,但也有显著的缺点。递归由于是函数自己调用自己,而函数调用是有时间和空间的消耗的。每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址及临时变量。而且往栈里压入数据和弹出数据也需要时间。另外,递归中有可能很多计算都是重复的,从而对性能造成很大影响。递归的本质是把一个问题分割成多个小问题,如果多个小问题存在相互重叠的部分,那么就存在重复的计算。递...原创 2019-02-28 00:50:29 · 550 阅读 · 0 评论 -
【剑指offer】部分题目合集
文章目录剪绳子code旋转数组的最小元素二分查找解法青蛙跳台阶分析题意递归解法 超时DP类似题目还有509 [Fibonacci Number](https://leetcode.com/problems/fibonacci-number)队列实现栈Code栈实现队列前序和中序构建二叉树其他类似题目二维数组中的查找第一题我的解法二分查找第二题数组中重复的数字自己的HashMap解法排序解法数组中出...原创 2019-03-20 11:41:55 · 1046 阅读 · 0 评论