zoukankan      html  css  js  c++  java
  • 算法学习之剑指offer(一)

    题目一:

    题目描述

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


    思路1:遍历每一行,然后对每一行进行二分查找,复杂度为n*logn

    public class Solution {
        public boolean Find(int target, int [][] array) {
    		
            for(int i=0;i<array.length;i++)
            {
                int min=0;
                int max = array[i].length-1;
                
                while(min<=max){
                    int mid = (min+max)/2;
                    if(target>array[i][mid])
                        min=mid+1;
                    else if(target<array[i][mid])
                        max=mid-1;
                    else
                        return true;
                }
            }
            return false;
            
        }
    }
    思路二:

    选取二维数组的一个角,比如选左下(不能选左上和右下,会产生岔路),target大于角则往右移一个(右边递增),target小于角则往上移一个(上面递减),不断如此就可以找到了

    public class Solution {
        public boolean Find(int target, int [][] array) {
            int row=0;
            int col=array.length-1;
            
            while(col>=0&&row<array[col].length){
                if(target<array[col][row])
                    col--;
                else if(target>array[col][row])
                    row++;
                else 
                    return true;
            }
            
            return false;
            
        }
    }

    题目二:

    题目描述

    请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

    public class Solution {
        public String replaceSpace(StringBuffer str) {
            
            StringBuffer stb_new = new StringBuffer();
            
        	for(int i=0;i<str.length();i++){
                char c = str.charAt(i);
                if(c==' ')
                    stb_new.append("%20");
                else
                    stb_new.append(c);
            }
            
            return stb_new.toString();
        }
    }
    题目三:

    题目描述

    输入一个链表,从尾到头打印链表每个节点的值。

    /**
    *    public class ListNode {
    *        int val;
    *        ListNode next = null;
    *
    *        ListNode(int val) {
    *            this.val = val;
    *        }
    *    }
    *
    */
    import java.util.ArrayList;
    public class Solution {
        
        ArrayList<Integer> list = new ArrayList<Integer>();
        
        public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
            
            if(listNode!=null)
            {
                printListFromTailToHead(listNode.next);
                list.add(listNode.val);
            }
            
            return list;
            
        }
    }

    题目四:

    题目描述

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    import java.util.*;
    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
            
            if(pre==null||in==null||pre.length==0||in.length==0)
                return null;
            
            TreeNode node = new TreeNode(pre[0]);
            
            //pre[0]是根节点  注意!1.通过遍历可以知道 中序的in数组里 i所处的位置,左边是左子树 右边是右子树
            //2.通过此时的i可以得出左右子树个数,就可以得出pre前序遍历中哪些是左子树的前序遍历
            for(int i=0;i<in.length;i++){
                if(pre[0]==in[i]){
                    node.left=reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1),
                                                    Arrays.copyOfRange(in,0,i));
                    
                    node.right=reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length),
                                                     Arrays.copyOfRange(in,i+1,in.length));
                }
            }
            
            return node;
            
        }
    }



  • 相关阅读:
    perl6中函数参数(2)
    perl6中函数参数(1)
    上传绕过(转载)
    perl6中的hash定义(1)
    mssql手工注入2
    mssql手工注入1
    mssql注入中的储存用法删除与恢复
    perl 复制exe文件的简单方法
    python shell
    perl中设置POST登录时的重定向
  • 原文地址:https://www.cnblogs.com/chz-blogs/p/9380935.html
Copyright © 2011-2022 走看看