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. [转]关于信息安全认证CISP与CISSP的对比及分析

    本文转自:https://www.douban.com/group/topic/89081816/ 最近好多信息安全行业或者打算转行的职场人在纠结学CISP还是学CISSP,我给大家就CISP和CIS ...

  2. 再不写,我怕就再也不写了-LAMP基础

    hi 经历了4天大餐的洗礼,整个人都思密达了...昨天的懒,是没有原因的懒,总之就是该提笔了亲 1.Ubuntu下的LAMP配置 -----Ubuntu基础知识----- ----管理员权限 出于安全 ...

  3. NOIP2003神经网络[BFS]

    题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神经网络的研究一直是当今 ...

  4. JSTL基础

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

  5. Github 扩展推荐

    前言 github是个知识的宝库,分享一下自己浏览github使用的浏览器扩展. octotree 功能简介:以文件组织的结构方式查看仓库,再也不用一级一级地翻目录啦.下载单个文件 源码:https: ...

  6. Flash 二进制传图片到后台Java服务器接收

    需求:把客户端处理过的图片返还给服务器Flash端代码 01 package {02     import com.adobe.images.JPGEncoder;    03     import  ...

  7. PageContext

    pageContext对象 pageContext对象是JSP中很重要的一个内置对象,不过在一般的JSP程序中,很少用到它,所以知道request对象.response对象的人比较多,知道pageCo ...

  8. 学习ROS的基本知识,节点、话题、服务等

    之前我在电脑上安装的ROS版本为jade版的. 可是后来发现各个教程安装的是indigo版的 于是我又去看了看ROS官网,在官网上有这样的一句话. 而且又因为indigo版的资料多一些,于是我就换了r ...

  9. Extjs API - JS Duck

    1. 安裝JS Duck3  tar.gz版本 https://nodeload.github.com/senchalabs/jsduck/tarball/master  exe版本 http://c ...

  10. iOS 推送所调用的函数详解

    AppDelegate类中: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDic ...