16.输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

a)这里首先判断两个链表中有没有空表,这个就是依据表头是否为空。然后就是比较节点值的大小,然后就是使用递归求出接下来的节点。

class ListNode {

    int val;

    ListNode next = null;

    ListNode(int val) {

        this.val = val;

    }

}

public class Solution {

    public ListNode Merge(ListNode list1,ListNode list2) {

        if(list1 == null){

            return list2;

        }else if(list2 == null){

            return list1;

        }

        ListNode newHead = null;

        if(list1.val < list2.val){

            newHead = list1;

            newHead.next = Merge(list1.next,list2);

        }else{

            newHead = list2;

            newHead.next = Merge(list1,list2.next);

        }

        return newHead;

    }

}

17.输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

class TreeNode {

    int val = 0;

    TreeNode left = null;

    TreeNode right = null;

    public TreeNode(int val) {

        this.val = val;

    }

}

public class Solution {

public boolean HasSubtree(TreeNode root1,TreeNode root2) {

    //定义一个变量用来返回树1是否包含树2

        boolean result = false;

        if(root1 != null && root2 != null){

            if(root1.val == root2.val)

                result = DoesTree1HaveTree2(root1,root2);

            if(!result)

                result = HasSubtree(root1.left,root2);

            if(!result)

                result = HasSubtree(root1.right,root2);

        }

        return result;

    }

//该方法用来判断树1是否包含树2

    public boolean DoesTree1HaveTree2(TreeNode root1,TreeNode root2){

        if(root2 == null)

            return true;

        if(root1 == null)

            return false;

        if(root1.val != root2.val)

            return false;

        return DoesTree1HaveTree2(root1.left,root2.left)

&&DoesTree1HaveTree2(root1.right,root2.right);

    }

}

18.操作给定的二叉树,将其变换为源二叉树的镜像。

输入描述:

二叉树的镜像定义:源二叉树

8

/  \

6   10

/ \   / \

5  7  9 11

镜像二叉树

8

/  \

10  6

/ \   / \

11 9  7  5

class TreeNode {

    int val = 0;

    TreeNode left = null;

    TreeNode right = null;

    public TreeNode(int val) {

        this.val = val;

    }

}

public class Solution {

    public void Mirror(TreeNode root) {

        if(root == null)

            return;

        if(root.left == null && root.right != null){

            root.left = root.right;

            root.right = null;

        }else if(root.left != null && root.right == null){

            root.right = root.left;

            root.left = null;

        }else if(root.left != null && root.right != null){

            TreeNode temp = root.left;

            root.left = root.right;

            root.right = temp;

        }

        if(root.left!=null)

            Mirror(root.left);

        if(root.right!=null)

            Mirror(root.right);

    }

}

19.输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.

import java.util.ArrayList;

public class Solution {

    public ArrayList<Integer> printMatrix(int [][] matrix) {

       ArrayList<Integer> result = new ArrayList<Integer> ();

        //如果二维数组的长度为0的话就返回没有值的list

        if(matrix.length==0)

            return result;

        int n = matrix.length;

        int m = matrix[0].length;

        if(m==0)

            return result;

        int lay = (Math.min(n,m)+1)/2;//这个是层数

        for(int i=0;i<lay;i++){

            for(int k = i;k<m-i;k++)

                result.add(matrix[i][k]);//左至右

            for(int j=i+1;j<n-i;j++)

                result.add(matrix[j][m-i-1]);//右上至右下

            for(int k=m-i-2;(k>=i)&&(n-i-1!=i);k--)

                result.add(matrix[n-i-1][k]);//右至左

            for(int j=n-i-2;(j>i)&&(m-i-1!=i);j--)

                result.add(matrix[j][i]);//左下至左上

        }

        return result;

    }

}

20.定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

import java.util.Stack;

public class Solution {

       Stack s1 = new Stack();

    Stack s2 = new Stack();

    int min = 0;

    public void push(int node) {

        if(s1.size() == 0 && s2.size() == 0){

             s1.push(node);

             s2.push(node);

             min = node;

        }else{

             s1.push(node);

             if(node<=min){

                    min = node;

                    s2.push(min);

             }else{

                    s2.push(min);

             }

        }

    }

    public void pop() {

          if(s1.size() == 0 && s2.size() == 0){

                 System.out.println("栈内没有元素了!");

          }else{

                 s1.pop();

                 s2.pop();

          }

    }

    public int min() {

          int m = 0;

          if(s2.size() != 0){

                 m = (int) s2.pop();

                 s2.push(m);

          }

        return m;

    }

       public static void main(String[] args) {

              Solution s = new Solution();

              s.push(1);

              s.push(3);

              s.push(5);

              s.push(0);

              System.out.println(s.min());

       }

}

Java--剑指offer(4)的更多相关文章

  1. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  2. 剑指offer编程题Java实现——面试题5从头到尾打印链表

    题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这 ...

  3. 剑指offer面试题-Java版-持续更新

    最近在用Java刷剑指offer(第二版)的面试题.书中原题的代码采用C++编写,有些题的初衷是为了考察C++的指针.模板等特性,这些题使用Java编写有些不合适.但多数题还是考察通用的算法.数据结构 ...

  4. 《剑指offer》全部题目-含Java实现

    1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. publi ...

  5. 剑指Offer——Java实现栈和队列的互模拟操作

    剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列   题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型.   思路:其实就是把队列正常入 ...

  6. 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制

    剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...

  7. 剑指Offer——知识点储备-Java基础

    剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...

  8. 剑指offer面试题5 从头到尾打印链表(java)

    注:(1)这里体现了java数据结构与C语言的不同之处 (2)栈的操作直接利用stack进行 package com.xsf.SordForOffer; import java.util.Stack; ...

  9. 剑指offer面试题4 替换空格(java)

    注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...

  10. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...

随机推荐

  1. z-index学习知识小结

    一.z-index七阶层叠顺序表 1.层叠顺序的大小比较: background/border < 负z-index < block块状水平盒子 < float浮动盒子 < i ...

  2. JSTL基础

    是java中的一个定制标记库集 实现了jsp页面中的代码复用,基于标签库原理,重复率较高的代码块支持复用,提高效率 书写jsp页面时可读性更强 http://archive.apache.org/di ...

  3. Java注解的使用

    概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法. Java中的常见注解 JDK自带注解: @Override//覆盖父类的方法 @Deprecated//表示方法过时了 @ ...

  4. Java MyEclipse下Ant build.xml简单实例详解

    一.下载配置ant 1.首先下载ant: http://www.apache.org/ 下载最新的版本2.解压ant 后设置ANT_HOME, PATH中添加ANT_HOME目录下的bin目录(如:A ...

  5. maven-安装配置

    Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. maven是什么maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行” ...

  6. [No000022]他们说:得诺贝尔奖到底有多难?

  7. 代码管理工具之git的学习

    1.代码管理工具git的学习  http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 2.github的使用帮助   https:// ...

  8. 利用scp 远程上传下载文件/文件夹和ssh远程执行命令

    利用scp传输文件 1.从服务器下载文件scp username@servername:/path/filename /tmp/local_destination例如scp codinglog@192 ...

  9. oracle 事务总结

    用了这么长时间的oracle,该总结一下所得了 1,事务 事务用于保证数据的一致性, 它由一组相关的 dml语句组成, 该组的dml(数据操作语言,增删改,没有查询)语句要么全部成功,要么全部失败,比 ...

  10. css中如何设置字体

    来自百度的回答: 建议使用font-family: "Microsoft YaHei";支持UTF-8和GB2312字符集. 不生效的3种情况:1.当此属性定义的是全局样式时,对于 ...