剑指offer
不多不少の
这个作者很懒,什么都没留下…
展开
-
【剑指offer】查找两个链表的公共节点
【解题思路】 利用快慢指针 plong=pshort+dif_length public Node findFirstAncestor(Node pHead1,Node pHead2){ if(pHead1==null||pHead2==null) return null; int list2_size=0; int list1_size=0; Node p1=pH原创 2016-08-16 19:32:20 · 220 阅读 · 0 评论 -
数组中出现次数超过一半的数字-基于Partitoin和数据规律
【解题思路】超过一半,排序好的数组中,中位数上的值即为该数字partition方法,若ipartition结果出现的索引值idx出现在mid之后,则查找的数字在idx左边;否则出现在右侧【注意事项】1 验证输入的合法性(NULL,length是否存在超过半数的数值)全局变量:inputInvalid 验证输入的合法性局部变量:moreThanHalf 验证结果原创 2016-09-05 10:54:14 · 238 阅读 · 0 评论 -
【剑指offer】打印1到最大n位数
【基本思路】从高位到低位迭代打印 总共n位数,每一个位置上为0-9共10个数字,一次迭代打印该位置确定后,剩余位置上的数字//PrintNum 函数设置:从第一个不为0的数字开始打印原创 2016-09-04 17:22:44 · 434 阅读 · 0 评论 -
【剑指offer】O(1)时间删除指定节点
参考代码前文:Node 和链表的定义参见Java单链表操作【代码使用前提】给定的节点保证在链表中!!!【解题思路】把删除当前节点p视为 将p->next 的值覆盖p,直接删除p-.>next 节点(代码中size为了统计链表的节点个数,实际编写中可以不留意)将此处的代码添加到MylinkList的定义类中public void DeleteNode(Node原创 2016-08-13 11:36:44 · 195 阅读 · 0 评论 -
【剑指offer】从尾到头打印链表
【前提】Node定义和链表的操作代码 参照 Java 单链表操作【解题思路-】Java中利用栈的“”FILO“”功能完成逆向打印private static void inversePrinting(MyLinkList linklist) { // TODO Auto-generated method stub Node node=linklist.head; Sta原创 2016-08-12 21:55:21 · 158 阅读 · 0 评论 -
【剑指offer】旋转递增数组的最小数字
思路:利用二叉查找原理,定义mid ,before 和behind三个标签array [mid]>array[before]时,before=mid;array[mid]public class MinNumberInRoastedArray { public static void main(String[] args){ int[] array={1,1,0,1}; int原创 2016-09-03 22:25:02 · 199 阅读 · 0 评论 -
【剑指offer】Excel2003中,用A表示第一列,B表示第二列,。。Z表示第26列,AA表示27列,AB表示第28列
输入:字母表示的列号编码输出: 对应的列号import java.util.Scanner;public class ExcelColumn { public static void main (String[] args) { Scanner input =new Scanner(System.in); String message=input.nextLine();原创 2016-08-09 16:20:47 · 1464 阅读 · 0 评论 -
【剑指offer】统计二进制整数中1的个数
【知识点】:1 整数-要判断整数的正负之分2 位操作:左移(num 右移(num>>n): 正数在左边补齐n个0,负数在左边补齐n个13二进制位数统计:依次从二进制尾端判断当前位置的0-1情况(利用与pos&1操作),当判断倒数第二位时候(&10),倒数第三位(&100)。。。,即每次1左移1位。4 flag的移位为程序构建的循环终止条件(3原创 2016-08-11 08:44:04 · 277 阅读 · 0 评论 -
【剑指offer】将空格替换制定字符串
要求:已知一个有足够剩余空间的字符串数组。请将数组中出现的空格替换成“%20”额外说明:innitialArray : 用于从键盘读入的字符串初始该数组import java.util.Scanner;public class ReplaceBlack { public static void main(String[] args){ char[] array=n原创 2016-08-11 22:02:54 · 258 阅读 · 0 评论 -
【剑指offer】 用两个栈实现队列 -Java
如有不足,请批评指正1构建队import java.util.Stack;public class MyQueue { static Stack stack1=new Stack<>(); static Stack stack2=new Stack<>(); public void enQueue(char ch){ stack1.push(ch); } pub原创 2016-09-03 16:33:34 · 203 阅读 · 0 评论 -
【剑指offer】调整数组顺序使得奇数位于偶数前面
【解题思路:】两个指针分别位于数组的首位,当满足交换条件(前指针为偶数,后指针为奇数时候交换指针中对应的内容)【其他】判断奇数偶数: 位操作 (&1决定最后一位是0 还是1 从而决定奇数偶数)public class ChangeEven { public static void main(String[] args){ int[] array={0}; System原创 2016-08-22 14:51:49 · 187 阅读 · 0 评论 -
【剑指offer】面试题15 使用一次遍历查找到倒数第K个节点-java
节点代码和链表定义代码参加 Java单链表操作【要求】 单次遍历即返回实验结果【解题思路】使用两个指针 *p1 和p2=*(p1+k-1), 当p2变为尾节点时候,p1即为所需要的倒数第K个节点【考察点】-代码的鲁棒性 (即程序能够判断输入是否合乎规范要求,并对不合要求的输入予以合理的处理)实现代码:在MyLInkList类中添加方法findKthToTailp原创 2016-08-13 15:55:13 · 508 阅读 · 0 评论 -
【剑指offer】数组中的逆序对
【解题思路】参照 --归并排序 在前半部分和后半部分合并的时候,通过判断两个数组的最后位置数值的大小进行逆序对查找firstHale[fst_end]>secHalf(sec_end) 说明对于firstHale[fst_end],后半部分数组都与之构成逆序对,直接压栈该数值对,否则:指向secHalf 的指针向前移动一步。//temp 每次将比较结果中大的那个数字放入其原创 2016-09-09 15:40:59 · 229 阅读 · 0 评论 -
【剑指offer】最大连续连续子数组
【解题思路】当数组的和为负时候,重新创建子数组package offerExam;public class SumOfMaxSubMatrix { public static void main(String[] args){ int[] array={1,-2,3,10,-4,7,2,-5}; int[] subMatrixIndx={0,0}; //用于存储最大连续子数组的原创 2016-09-05 17:40:04 · 249 阅读 · 0 评论