
剑指offer
pomay
等风来,不如追风去,等飞到一定的高度,风自然也就来了~
展开
-
java实现输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class MergeTwoList {public ListNode Merge(ListNode list1, ListNode list2) {if (list1 == null)return原创 2017-05-10 18:58:35 · 1091 阅读 · 0 评论 -
java实现定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数
import java.util.Stack;/** * 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 * * @author pomay * */public class Solution_minstack{ // 数据栈 Stack dataStack = new Stack(); // 辅助栈 Stack minStack = new S原创 2017-05-16 16:00:06 · 2568 阅读 · 0 评论 -
java实现从上往下打印出二叉树的每个节点,同层节点从左至右打印。
import java.util.ArrayList;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*//** *原创 2017-05-17 17:53:09 · 975 阅读 · 0 评论 -
java实现输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
/** * 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 * * @author pomay * */public class Solution_afterbianli{ public boolean VerifySquenceOfBST(int[] sequence) { if原创 2017-05-17 18:51:14 · 653 阅读 · 1 评论 -
java实现输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径
import java.util.ArrayList;/** * 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径 * * @author pomay * */public class Solution_treenodepath{ // 存放所有路径 ArrayList> lists原创 2017-05-18 11:25:29 · 2920 阅读 · 0 评论 -
java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head
/** * 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意, * 输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 第一步:根据原始链表的每个结点N创建对应的结点N' * 第二步:设置复制出来结点的random.假设原始结点的随机指向S,复制出来结点的random指向S后一原创 2017-05-19 17:08:08 · 4002 阅读 · 1 评论 -
java实现快速排序的分割思想:在快速排序算法中,我们随机在数组中选择一个数字,然后把比选中数字小的数字都排在它前面,比选中数字大的数字都排在它的后面。
package Nowcode;//快速排序的分割思想:在快速排序算法中,我们随机在数组中选择一个数字,然后把比选中数字小的数字都排在它前面,比选中数字大的数字都排在它的后面。public class QuickSort { void quickSort(int[] data, int length, int start, int end) { if (start == end) {原创 2017-06-06 09:31:13 · 891 阅读 · 0 评论 -
java实现找出数组中出现次数超过一半的数字
package Nowcode;/** * 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0 * * @author Administrator * */public class moreHalfNum { // 采用阵原创 2017-06-05 15:33:46 · 1804 阅读 · 0 评论 -
java实现输入n个整数,找出其中最小的K个数
package Nowcode;import java.util.ArrayList;/** * 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 * * @author Administrator * */public class GetLeastNumbers { // 解决一:o(n)的算法:只原创 2017-06-06 11:27:11 · 6145 阅读 · 0 评论 -
java实现二叉搜索树转双向链表
/** * 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 * * @author pomay * */class Solution_treetolist{ public TreeNode Convert(TreeNode pRootOfTree) { TreeNode lastNodeOfList =原创 2017-06-01 17:32:45 · 473 阅读 · 0 评论 -
java实现连续子数组的最大和(子向量的长度至少是1)
package Nowcode;/** * HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中, * 常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数, * 并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个原创 2017-06-06 16:52:41 · 744 阅读 · 0 评论 -
java实现字符串排列组合问题
import java.util.ArrayList;import java.util.Collections;/** * 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac, * bca,cab和cba。 * * @author pomay * */public class S原创 2017-06-02 16:16:01 · 7290 阅读 · 0 评论 -
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323
import java.util.Scanner;/** * 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323 * * @author Pengmeiyan * */public class MinNum { public static String P原创 2017-07-04 09:41:30 · 1244 阅读 · 0 评论 -
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。
import java.util.Scanner;/** * 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 * 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 * * @author Pengmeiyan * */public class Chou { public static int G原创 2017-07-05 17:16:51 · 9876 阅读 · 1 评论 -
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
import java.util.Scanner;/** * 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 * * @author pomay * */public class NowCode_FirstOnly{ public static int FirstOnly(String str) { int i原创 2017-08-02 11:24:38 · 417 阅读 · 0 评论 -
统计一个数字在排序数组中出现的次数。 数组是排序的,只需要找到第一个K和最后一个K就可以知道有多少个,
/** * 统计一个数字在排序数组中出现的次数。 数组是排序的,只需要找到第一个K和最后一个K就可以知道有多少个, * 如果直接遍历,时间复杂度是o(n),用二分查找,时间复杂度是o(logn) * * @author pomay * */public class GetNumberOfK{ public static int findFirstK(int[] a, int k原创 2017-08-02 11:27:30 · 648 阅读 · 0 评论 -
统计一个数字在排序数组中出现的次数
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 * 1、把数组从头到尾做异或操作,出现两次的数字会相互抵消,因为自己和自己异或就是0,剩下的就是出现1次的数字的异或 * 2、把最后得到的异或值第一个为1的位的位置 * 3、根据这个位置为1将原数组分成n等分 * 4、分别对这n个数组求异或,因为两个相同的数任何一位都是相同的,一定会被分原创 2017-08-02 12:07:39 · 1582 阅读 · 0 评论 -
和为s的两个数字VS和为S的连续正数序列
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。import java.util.ArrayList;/** * 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 * * @author pomay * */publi原创 2017-08-02 16:00:40 · 412 阅读 · 0 评论 -
java判断一个序列是否可能是另外一个压栈序列的弹出序列
import java.util.Stack;/** * 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4, * 5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意: * 这两个序列的长度是相等的) * * @au原创 2017-05-16 16:54:45 · 827 阅读 · 0 评论 -
java实现输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
import java.util.ArrayList;/** * 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 * 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. * * @author pomay * */pu原创 2017-05-15 11:04:35 · 7064 阅读 · 0 评论 -
java实现操作给定的二叉树,将其变换为源二叉树的镜像。
二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5/**public class TreeNode { int va原创 2017-05-11 17:03:45 · 422 阅读 · 0 评论 -
java实现输入一个链表,反转链表后,输出链表的所有元素。
public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution {public ListNode ReverseList(ListNode head) {if (head =原创 2017-05-10 18:29:12 · 2868 阅读 · 0 评论 -
java实现输入两棵二叉树A,B,判断B是不是A的子结构
class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}public class FindSonTree { public boolean HasSubtree(TreeNode root原创 2017-05-11 11:50:35 · 1067 阅读 · 0 评论 -
java实现从尾到头打印链表每个节点的值
import java.util.ArrayList;class ListNode{ int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution_lianbiao{ ArrayList arrayList = new ArrayList();原创 2017-05-11 11:57:45 · 5264 阅读 · 0 评论 -
java实现重建二叉树
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }public class Solution_erchashu{ public TreeNode reConstructBinaryTree(int [] pre,int []原创 2017-05-11 11:59:56 · 342 阅读 · 0 评论 -
java两个栈实现队列
import java.util.Stack;public class Solution_2zhan1duilie{ Stack stack1 = new Stack(); Stack stack2 = new Stack(); public void push(int node) { stack1.push(node); }原创 2017-05-11 12:00:55 · 279 阅读 · 0 评论 -
java实现把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如{3,4,5,1,2}为{1,2,3,4,5}
public class Solution_xuanzhuanshuzu{ public int minNumberInRotateArray(int[] array) { // 如果数组长度为0则返回-1 if (array.length == 0) { return -1; } int left = 0; int right = array.length -原创 2017-05-11 12:02:48 · 3333 阅读 · 0 评论 -
java实现斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39
public class Solution_feibonaqi{ public int Fibonacci(int n) { int result[] = { 0, 1 }; if (n < 2) { return result[n]; } int f0 = 0; int f1 = 1; int f2 = 0; for (int i = 2; i原创 2017-05-11 12:03:47 · 10674 阅读 · 0 评论 -
java实现一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
public class Solution_qingwatiao{ public int RectCover(int target) { int result[] = { 0, 1, 2 }; if (target <= 2) { return result[target]; } int f0 = 1; int f1 = 2; int f2 = 0;原创 2017-05-11 12:04:36 · 717 阅读 · 0 评论 -
java实现一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
public class Solution_biantaiqingwatiao{ public int Fibonacci(int n) { int m = (int) Math.pow(2, n - 1); return m; } public static void main(String[] args) { Scanner sc = new Scanner(Sys原创 2017-05-11 12:05:16 · 1492 阅读 · 0 评论 -
java实现我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
public class Solution_juzhenfugai{ public int Fibonacci(int n) { int result[] = { 1, 2 }; if (n < 2) { return result[n - 1]; } int f0 = 1; int f1 = 2; int f2 = 0; for (int i =原创 2017-05-11 12:06:59 · 1010 阅读 · 0 评论 -
java实现在Excel2003中,用A表示第一列,B表示第二列...Z表示第26列,AA表示第27列,AB表示第28列...依次列推。请写出一个函数, 输入用字母表示的列号编码,输出它是第几列
public class Solution_excel2003{ public int Find(String str) { char[] strArr = str.toCharArray(); int exp = 0; int sum = 0; for (int i = strArr.length - 1; i >= 0; i--) { int num = s原创 2017-05-11 12:07:53 · 3410 阅读 · 0 评论 -
java实现输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
import java.util.Scanner;public class Solution_erjinzhiNo1{ public int NumberOf1(int n) { int count = 0; while (n != 0) { ++count; n = (n - 1) & n; } return count; } public st原创 2017-05-11 12:09:03 · 694 阅读 · 0 评论 -
java实现给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
public class Solution { public double Power(double base, int exponent) { double result = 1.0; if (exponent == 0) return 1; else if (exponent > 0) { for (int i = 1; i <= exponen原创 2017-05-11 12:11:10 · 807 阅读 · 0 评论 -
java实现输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。public class Solution{ public void reOrderArray(int[] array) { // 趟数 for (int i = 0; i < array.length; i+原创 2017-05-11 12:12:08 · 1816 阅读 · 0 评论 -
java实现在二维数组中查找一个数
在二维数组中查找7在一个二维数组中,每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution_shuzu{ public boolean Find(int target, int[][] array) { int rows= array.len原创 2017-03-23 11:56:39 · 3579 阅读 · 0 评论 -
java实现字符串替换
/** * 请实现一个函数,将一个字符串中的空格替换成“%20”。 * 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 * @author pomay * */public class Solution_zifuchuan{//方法1,用replace public String replaceSpace原创 2017-03-23 11:59:47 · 4452 阅读 · 0 评论 -
java实现输入一个链表,输出该链表中倒数第k个结点。
package com.pomay.offer;/** * 输入一个链表,输出该链表中倒数第k个结点。 * * @author pomay * */class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}}publ原创 2017-05-10 15:08:52 · 1498 阅读 · 0 评论 -
数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007/** * [归并排序]在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 * 并将P对1000000007取模的结果原创 2017-08-03 12:10:41 · 794 阅读 · 0 评论