随笔分类 -  剑指Offer

摘要:在归并排序的过程中计算,时间复杂度降低 阅读全文
posted @ 2019-07-24 14:01 LeeJuly 阅读(400) 评论(0) 推荐(0) 编辑
摘要:等待理解!!设N = abcde ,其中abcde分别为十进制中各位上的数字。 如果要计算百位上1出现的次数,它要受到3方面的影响:百位上的数字,百位以下(低位)的数字,百位以上(高位)的数字。 ① 如果百位上数字为0,百位上可能出现1的次数由更高位决定。比如:12013,则可以知道百位出现1的情况 阅读全文
posted @ 2019-07-19 21:25 LeeJuly 阅读(516) 评论(0) 推荐(0) 编辑
摘要:使用java中的优先队列: 阅读全文
posted @ 2019-07-19 21:11 LeeJuly 阅读(105) 评论(0) 推荐(0) 编辑
摘要:基本思想就是不断互相抵消。 用一个times保存当前元素的次数 result保存当前的元素,往后遍历,当后面元素等于当前元素,times++,不等于times--,当times为0的时候,result更换为新的元素。 最后剩下的元素,在返回到数组中遍历查看这个元素的个数,times为0的时候,就保存 阅读全文
posted @ 2019-07-19 20:59 LeeJuly 阅读(356) 评论(0) 推荐(0) 编辑
摘要:1、确定root; 2、遍历序列(除去root结点),找到第一个大于root的位置,则该位置左边为左子树,右边为右子树; 3、遍历右子树,若发现有小于root的值,则直接返回false; 4、分别判断左子树和右子树是否仍是二叉搜索树(即递归步骤1、2、3)。 public boolean Verif 阅读全文
posted @ 2019-07-19 09:57 LeeJuly 阅读(159) 评论(0) 推荐(0) 编辑
摘要:这里可以利用冒泡排序和插入排序的思想: 阅读全文
posted @ 2019-07-18 16:19 LeeJuly 阅读(118) 评论(0) 推荐(0) 编辑
摘要:关键的就是要利用前面的结果,不要一步一步往后乘。 比如2^8可以利用2^2,2^4等 这里就要涉及到二进制的右移>>1和&1 阅读全文
posted @ 2019-07-18 14:55 LeeJuly 阅读(93) 评论(0) 推荐(0) 编辑
摘要:法1:最优解: 每一个二进制-1以后,从右往下左第一个1的后面的数都会变为1,然后与原二进制数与以后后面就都会变为0,能这样操作几次就代表有几个1 1100-1=1011 法2: 阅读全文
posted @ 2019-07-18 11:38 LeeJuly 阅读(736) 评论(0) 推荐(0) 编辑
摘要:问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换! 问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。 从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下 从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动 阅读全文
posted @ 2019-07-18 09:44 LeeJuly 阅读(138) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示