随笔分类 -  博客 剑指Offer解题报告(Java版)

摘要:三种方法 第一种不断除2 除2可以用右移方式,但这种方式对于负数的话容易造成左边全为1,进入死循环 可以判断如果输入负数的话,取他的相反数,也就是取绝对值 第二种方法不断乘2,然后用n与该乘2的数做与,如果不为零,则说明该位有一个1 但这种方式这个不断乘2的数字要乘到溢出才完,可以设定while循环条件location乘以2小于n 第三种方法利用求最右边的... 阅读全文
posted @ 2015-03-31 15:50 keedor 阅读(171) 评论(0) 推荐(0)
摘要:基于二分法 index1为首,index2为尾,indexMid指向中间 当Number[index1]大于等于Number[index2]的条件满足时 判断index2和index1的差距是否等于1 如果相等,说明index2即为那个突变点,最小值,将index2赋给indexMid,最终返回Number[indexMid] 如果不等,就取indexMi... 阅读全文
posted @ 2015-03-30 21:57 keedor 阅读(155) 评论(0) 推荐(0)
摘要:主要实现从尾部添加字符和从头部删除字符 从尾部添加直接push进一个stack1即可 从头部删除,需要先将stack1中的字符压入stack2,然后从stack2弹出,这样顺序才对 考虑一种情况,先push进a和b,弹出a,再压入c,再弹出的话要弹出b 在将stack1的数压入stack2之前要判断stack2中是否为空,如果不为空,要等stack2为空了之后才... 阅读全文
posted @ 2015-03-30 21:46 keedor 阅读(148) 评论(0) 推荐(0)
摘要:利用栈,倒序都可以用栈解决 先将数据一个一个压入栈 然后再一个一个弹出 另外还有一种方法是利用递归,递归其实跟栈类似 方法一: package printListReversed5; import java.util.Stack; public class PrintListReversed5 { static void printListRever... 阅读全文
posted @ 2015-03-30 20:43 keedor 阅读(112) 评论(0) 推荐(0)
摘要:先遍历每个字符统计空格数 :String.charAt() 根据空格数计算新的长度 :newLength=oriLength+2*NumOfBlank 新建一个newLength长度的字符数组tempChars用于存放替换空格之后的字符数组 利用System.arraycopy函数将原字符串转换为数组拷贝到新的字符数组tempChars中 从新字符数... 阅读全文
posted @ 2015-03-30 20:31 keedor 阅读(179) 评论(0) 推荐(0)
摘要:先判断数组是否为空,为空返回false 不为空进入循环 获得矩阵的行数:rows=matrix.length 获得矩阵的列数:columns=matrix[0].length 从最右上角开始找,初始化row和column:row=0,column=columns-1; 所以while条件为 row=0 如果找到,即matrix[row][column]=numb... 阅读全文
posted @ 2015-03-30 19:32 keedor 阅读(176) 评论(0) 推荐(0)
摘要:corner case的处理 整数一般考虑两点:一点是符号,另外一点是越界 首先去掉多余的空格字符 然后读符号,可能是正号,也可能是负号,也可能没有符号 然后按顺序读数字 结束条件有三: 1、异常字符出现——舍弃异常字符后的数据,保留前面的数作为结果; 2、数字越界——返回最接近的整数; 3、正常结束 长度为0,返回0 输入0,返回... 阅读全文
posted @ 2015-03-30 19:24 keedor 阅读(149) 评论(0) 推荐(0)
摘要:class ConSum{ private: static int n; static int sum; public:ConSum(){++n;sum+n} static int getSum(){return sum;} }; int ConSum::n=0; int ConSum::sum=... 阅读全文
posted @ 2015-03-29 22:04 keedor 阅读(262) 评论(0) 推荐(0)
摘要:总结 递归 从大到小进行排序 辅助数组,将两个子数组中最右边的两个数进行比较,大的放入辅助数组中,此时辅助数组的索引也从最右边开始 也可以从小到大进行排序,将两个子数组中最左边的两个数进行比较,小的放入辅助数组中,此时辅助数组的索引从最左边开始 剩下的就是合并两个排好序的子数组的代码 while (i >= start && j >= mid + 1) { if (d... 阅读全文
posted @ 2015-03-23 16:33 keedor 阅读(136) 评论(0) 推荐(0)
摘要:总结 递归 比较两个链表当前节点的大小,将小的放入结果链表中 递归基石节点为空,返回另一个链表 package mergeSortedList17; public class MergeSortedList17 { static void printList(ListNode headNode){ if (headNode.nextNode==null) { Sy... 阅读全文
posted @ 2015-03-22 12:34 keedor 阅读(121) 评论(0) 推荐(0)
摘要:总结 定义三个类似指针的引用,一个指向当前节点,一个指向前一个节点,初始化为null,一个指向后一个节点 判定反转链表的头节点的依据是当前节点的下一个节点为null 反转过程,就是将前一个节点作为当前节点的下一个节点,将当前节点作为前一个节点,最后将下一个节点作为当前节点,实现链表的遍历继续进行下去 package reverseList16; pub... 阅读全文
posted @ 2015-03-22 12:13 keedor 阅读(178) 评论(0) 推荐(0)