zoukankan      html  css  js  c++  java
  • 剑指Offer(21-30)

    题21:包含min函数的栈

    题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1).

    public class Main{
        private MyStack<Integer> minStack = new MyStack<>();
        private MyStack<Integer> dataStack = new MyStack<>();
    
        public void push(Integer item){
            dataStack.push(item);
            if(minStack.length == 0 || item<=minStack.head.data){
                minStack.push(item);
            }else{
                minStack.push(minStack.head.data);
            }
        }
        public Integer pop(){
            if(dataStack.length == 0 || minStack.length == 0){
                return null;
            }
            minStack.pop();
            return dataStack.pop();
        }
        public Integer min(){
            if(minStack.length == 0){
                return null;
            }
            return minStack.head.data;
        }
        public static void main(String[] args){
            E21MinInStack test = new E21MinInStack();
            test.push(3);
            test.push(2);
            test.push(1);
            System.out.println(test.pop());
            System.out.println(test.min());
        }
    }
    

    # 题28:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 ``` public class Main { public static void main(String[] args){ permutation("abc"); }
    public static void permutation(String str){
    

    int count=0;
    if(strnull){
    return;
    }
    char [] chs=str.toCharArray();//将字符串转换为字符数组
    int point=0;
    System.out.print(chs);
    System.out.print(" ");
    count++;
    char temp1=chs[point];
    chs[point]=chs[++point];
    chs[point]=temp1;
    while (!String.valueOf(chs).equals(str)){
    System.out.print(chs);
    System.out.print(" ");
    count++;
    if(point
    chs.length-1){
    char temp=chs[point];
    chs[point]=chs[0];
    chs[0]=temp;
    point=0;
    }else {
    char temp=chs[point];
    chs[point]=chs[++point];
    chs[point]=temp;
    }
    }
    System.out.println(count);
    }
    }

    
    <br/>
    # 题29:数组中出现次数超过一半的数组
    题目描述
    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出null。
    

    public class Main {
    public static void main(String[] args){
    int [] array={1,2,3,2,2,2,5,4,2};
    System.out.println(morethanhalfnumber(array));
    }

    public static Integer  morethanhalfnumber(int [] array){
        int count=1;
        int temp=array[0];
        for(int i=1;i<array.length;i++){
            if(temp==array[i]){
                count++;
            }else {
                count--;
                if(count==0){
                    temp=array[i];
                    count++;
                }
            }
        }
        int count1=0;
        for(int i=0;i<array.length;i++){
            if(array[i]==temp){
                count1++;
            }
        }
        return count1>=array.length/2 ? temp:null;
    }
    

    }

    <br/>
    # 题30:最小的k个数
    题目描述
    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
    

    import java.util.ArrayList;
    import java.util.TreeSet;

    public class Main {
    public static void main(String[] args){
    int [] array={4,5,1,6,2,7,3,8};
    int k=4;
    System.out.println(MinKnumber(array,k));

    }
    
    public static ArrayList<Integer> MinKnumber(int [] array, int k){
    if(array==null)
        return null;
    ArrayList<Integer> list = new ArrayList<Integer>(k);
    
    if(k>array.length)
        return list;
        TreeSet<Integer> tree=new TreeSet<Integer>();
        for(int i=0;i<array.length;i++){
            tree.add(array[i]);
        }
        int i=0;
        for (Integer elem:tree){
            if(i>k-1)
                break;
            list.add(elem);
            i++;
        }
        return list;
    }
    

    }

    Learn ,Practice ,Summary !
  • 相关阅读:
    Cocos2dx开发(3)——Cocos2dx打包成APK,ANT环境搭建
    Cocos2dx开发(2)——Win8.1下Cocod2dx 3.2环境搭建
    Cocos2dx开发(1)——Win8.1下 NDK r10 环境搭建
    设计模式备忘录(1):适配器模式、依赖注入依赖倒置、空对象模式
    使用latencytop深度了解你的系统的延迟(转)
    操作系统基础
    计算机基础
    说明exit()函数作用的程序
    变量的引用类型和非引用类型的区别
    二进制转16进制JAVA代码
  • 原文地址:https://www.cnblogs.com/daminzhou/p/8406470.html
Copyright © 2011-2022 走看看