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. linux运行级别[转自网络]

    运行级别就是操作系统当前正在运行的功能级别.级别是从0到6,具有不同的功能.这些级别定义在/ect/inittab文件中.这个文件是init 程序寻找的主要文件,最先运行的服务是那些放在/etc/rc ...

  2. java报表工具FineReport常用函数的用法总结(数学和三角函数)

    ABS ABS(number):返回指定数字的绝对值.绝对值是指没有正负符号的数值. Number:需要求出绝对值的任意实数. 示例: ABS(-1.5)等于1.5. ABS(0)等于0. ABS(2 ...

  3. [转]android 获取视频帧

    本文转自:http://blog.csdn.net/heart_Moving/article/details/17414067 今天做Android视频文件解码,需求:从一个视频文件获取到一帧一帧的图 ...

  4. [转] cordova-plugin-x-toast

    本文转自:https://www.npmjs.com/package/cordova-plugin-x-toast cordova plugin add https://github.com/Eddy ...

  5. PaintView 绘图控件解析

    博客地址:博客园,版权所有,转载须联系作者. GitHub地址:JustWeTools 最近做了个绘图的控件,实现了一些有趣的功能. 先上效果图: PaintView画图工具: 1.可直接使用设定按钮 ...

  6. LoadRunner11.0下载及安装链接~(By网络)

    Download and install O(∩_∩)O: http://www.jb51.net/softjc/71256.html

  7. SQL 编程

    用SQL编写程序首先我们要了解SQL的一些编程方法 1.使用变量 变量:是可以存储数据值的对象,可以使用局部变量向SQL语句专递数据. (1)局部变量 T-SQL中,局部变量的名称必须以标记@作为前缀 ...

  8. jmeter beanshell内容

    byte [] sampledata = ctx.getPreviousResult().getResponseData(); String  smapledatastring = new Strin ...

  9. HTML-学习笔记(属性)

    HTML属性 HTML 标签可以拥有属性.属性提供了有关HTML元素更多的信息. 属性总是以键值对的形式出现.例如 name = "value"; 属性总是在HTML元素的开始标签 ...

  10. 为EXSi5.5上的Centos虚机增加硬盘容量

    宿主机调整 1. 关闭虚机, 2. 检查是否有存在的snapshot, 如果有, 需要删除, 否则不能调整磁盘容量 3. 虚机上编辑配置, 将磁盘容量调大后保存 虚机调整 参考这篇写得非常详细: 点击 ...