zoukankan      html  css  js  c++  java
  • 算法

    1.一个包含1-100数字的数组中,有一个数字丢失了,如何快速的找出它?

      解决思路:1)计算1-100所有数字之和sum;

           2)计算这个数组所有值之和sum2;

           3)缺失的数字为num=sum-sum2。

    2.在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

      解决思路:从头至尾遍历数组,比较当前遍历的数x是否与下标i相等,若i与x相等则i++比较下一个数字,若不相等,则将x与其对应位置的数(x大小位置)进行比较,若相等则该数为重复数字然后i++比较下一个数字,如不相等则将x与其大小位置的数进行交换,i++比较下一个数字。

    3.输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。

    思路:以中序遍历访问二元查找树,比较小的节点先访问,对小节点的先处理,定义双向链表的头和尾,当头尾节点为空时,转换节点时,先让头尾指向同一个节点,以后再从尾部插入。

    public class BSTreeToList {
        private int value;
        BSTreeToList leftChild;
        BSTreeToList rightChild;
        private BSTreeToList head; //链表头结点
        private BSTreeToList tail; //链表尾节点
        
        public int getValue() {
            return value;
        }
    
        public void setValue(int value) {
            this.value = value;
        }
    
        public BSTreeToList getLeftChild() {
            return leftChild;
        }
    
        public void setLeftChild(BSTreeToList leftChild) {
            this.leftChild = leftChild;
        }
    
        public BSTreeToList getRightChild() {
            return rightChild;
        }
    
        public void setRightChild(BSTreeToList rightChild) {
            this.rightChild = rightChild;
        }
    
        //二叉树中插入数据
        public BSTreeToList add(BSTreeToList root,int value){
            if(root==null){
                root = new BSTreeToList();
                root.setLeftChild(null);
                root.setRightChild(null);
                root.setValue(value);
                return root;
            }
            
            //如果root不为null
            if(root.getValue()>value){
                root.setLeftChild(add(root.getLeftChild(), value)); 
            }else{
                root.setRightChild(add(root.getRightChild(), value));
            }
            return root;
        }
        
        //中序遍历
        public void traverse(BSTreeToList root){
            if(root==null){return;}
            traverse(root.getLeftChild());
            System.out.print(root.getValue()+" ");
            traverse(root.getRightChild());
        }
        
        //转换成链表
        public void transition(BSTreeToList root){
            if(root==null) return;
            transition(root.getLeftChild());
            changeNode(root);
            transition(root.getRightChild());
        }
        
        public void changeNode(BSTreeToList node){
            if(head==null){
                head = node;
                tail = node;
            }else{
                node.leftChild = tail;
                tail.rightChild = node;
                tail = node;
            }
        }
        
        public void preTraverse(){
            while(head!=null){
                System.out.print(head.getValue()+" ");
                 head = head.rightChild ;
            }
        }
        
        public void sufTraverse(){
            while(tail!=null){
                System.out.print(tail.getValue()+" ");
                tail = tail.leftChild;
            }
        }
        
        
        public static void main(String[] args) {
            BSTreeToList bsTreeToList = new BSTreeToList();
            BSTreeToList root =new BSTreeToList();
            root.setValue(9);
            root.setLeftChild(null);
            root.setRightChild(null);
            int []s = new int[]{1,4,8,10,2,5};
            for(int i =0;i<s.length;i++){
                bsTreeToList.add(root, s[i]);
            }
            System.out.print("中序遍历"+"  ");
            bsTreeToList.traverse(root);
            bsTreeToList.transition(root);
            System.out.println();
            System.out.print("链表从头至尾遍历"+"  ");
            bsTreeToList.preTraverse();
            System.out.println();
            System.out.print("链表从尾至头遍历"+"  ");
            bsTreeToList.sufTraverse();
        }
    }

    运行结果:

  • 相关阅读:
    docker使用以及dockerfile编写
    c++:空构造空析构的益处之一
    python os.path模块常用方法详解(转)
    enlarge your dataset
    解决镜像无法删除的问题multiple repositories
    Ubuntu 14.04 LTS 安装Docker(转)
    忘记root密码,怎么办
    [Unity3D]降低向Shader中传值的开销
    Shader预处理宏、内置状态变量、多版本编译等
    Unity Shader 常用函数列表
  • 原文地址:https://www.cnblogs.com/menbo/p/11066087.html
Copyright © 2011-2022 走看看