美文网首页
Java日记2018-05-12

Java日记2018-05-12

作者: hayes0420 | 来源:发表于2018-05-12 06:34 被阅读0次

第一题 序列化反序列化二叉树
先序遍历,null节点用特殊符号标记。 比较简单,不再想了


public class Solution {

    public static void serialize(TreeNode root, PrintStream ps) {
        if (root == null)
            ps.print("# ");
        else {
            ps.print(root.val + " ");
            serialize(root.left, ps);
            serialize(root.right, ps);
        }
    }

    public static TreeNode deserialize(Scanner cin) {
        String token = cin.next();
        if (token.equals("#"))
            return null;
        int val = Integer.parseInt(token);
        TreeNode root = new TreeNode(val);
        root.left = deserialize(cin);
        root.right = deserialize(cin);

        return root;

    }

    public static void main(String[] args) throws FileNotFoundException {
        TreeNode root = new TreeNode(30);
        root.left = new TreeNode(20);
        root.left.left = new TreeNode(10);
        root.right = new TreeNode(40);
        root.right.left = new TreeNode(35);
        root.right.right = new TreeNode(50);
        PrintStream ps = new PrintStream(new File("serialize.txt"));
        serialize(root, ps);

        Scanner cin = new Scanner(new File("serialize.txt"));
        TreeNode back = deserialize(cin);
        
        System.out.println(back.val);

    }
}

第二题 字符串的排列

从字符串数组中每次选取一个元素,放到数组最前面。然后,对剩余的元素全排列,步骤跟上面一样。很明显这是个递归处理的过程,一直到最后即可。

package com.lyc.dataautest;

public class ArrangeString {
    public static void arrange(String str) {
        if(str.length()==0) return;
        StringBuffer strb = new StringBuffer(str);
        arrangecore(strb,0,str.length()-1);
    }
    public static void arrangecore(StringBuffer strb,int start,int end) {
        if(strb.length()==0) return;
        if(start==end) {
            System.out.println("strb is:"+strb);
        } else {
            for(int i=start;i<=end;i++) {
                //选取一个元素放到当前最开始的位置(因为有for循环来回的增加i的值)
                swap(strb,start,i);
                //剩余全排列,
                arrangecore(strb,start+1,end);
                //把元素放回原位置
                swap(strb,start,i);
            }
        }
        
    }
    public static void swap(StringBuffer strb,int start,int end) {
        char temp= strb.charAt(start);
        strb.setCharAt(start, strb.charAt(end));
        strb.setCharAt(end, temp);
        
    }
    
    public static void main(String[] args) {
        
        String str2 = "abc";
        arrange(str2);
    }

}

问题 3

数组中有一个数字出现的次数超过数组长度的一半,也就是说它出现的次数比其他所有数字出现的次数的和还要多。因此我们可以遍历数组的时候保存两个值:一个是数组中的一个数字,一个是次数。当我们遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,则次数加1;如果下一个数字和我们之前保存的数字不同,则次数减1.如果次数为0,我们需要保存下一个数字,并把次数设为1.由于我们要找的数字出现的次数比其他所有数字出现的次数之和还要多,那么要找的数字肯定是最后一次把次数设为1时对应的数字。

package com.lyc.dataautest;

public class moreThanHalfNum {
    public static int find(int[] arr) {
        if(arr.length<1) return -1;
        int res=arr[0];
        int count=1;
        for(int i=1;i<arr.length-1;i++) {
            if(count==0) {
                res=arr[i];
                count=1;
            }
            if(arr[i]==res) {
                count++;
            } else {
                count--;
            }
        }
        //判断这个res是不是占有一大半的数字
        int cnt = 0;
        for (int val : arr)
            if (val == res)
                cnt++;
        
        System.out.println("teh res is:"+res);
        //如果占有一大半返回res,否则返回0
        return cnt > arr.length / 2 ? res : 0;
        
    }
    
    public static void main(String[] args) {
        int[] arr={1,2,3,5,2,5,5,5,6,5,7,5,5,5,5};
        find(arr);
    }

}

相关文章

  • 2018-05-12

    2018-05-12 YY妈妈 2018-05-12 22:32 · 字数 860 · 阅读 0 · 日记本 刹那...

  • Java日记2018-05-12

    第一题 序列化反序列化二叉树先序遍历,null节点用特殊符号标记。 比较简单,不再想了 第二题 字符串的排列 从字...

  • 诗词评修

    落花不语岁月长 蚂蚁说 关注 2018-05-12 06:29 · 字数 124 · 阅读 315 · 日记本 青...

  • 2018-05-12

    ZFQ_dacf 2018-05-12· 字数 572· 阅读 72· 日记本 姓名:周富强 公司:厦门大科机械有...

  • 2018-05-12

    2018-05-12 戴师傅简书作者 2018-05-12 20:12 打开App (稻盛哲学学习会)打卡第57天...

  • 第20天感恩日记 李大伟2018-05-12

    第20天感恩日记 李大伟2018-05-12 1感恩俊杰、任刚组织的指数基金投资指南共读活动,让更多的朋友,了...

  • Go语言初探gRPC服务

    环境:2018-05-12 protoc 3.5.1 go1.10.1 windowsgRPC: Google...

  • IRC 服务器搭建与测试

    layout: posttitle: "IRC 服务器搭建与测试"date: 2018-05-12 11:12:...

  • 2018-05-12 日记

    周末就是无聊啊,又把一年没玩的lol下载下来了,为什么闲暇时光就不会看看书呢,学学一些鸡汤文中的不断补充自己的知识...

  • 2018-05-12

    BOY 初夏新品 乐州女人馆 2018-05-12 作者--乐州女人馆...

网友评论

      本文标题:Java日记2018-05-12

      本文链接:https://www.haomeiwen.com/subject/dzhcdftx.html