算法题 日常记录

2017-03-29  本文已影响59人  icecrea

题目:0-999999之间的所有整数数字中,任何一位都不包括数字3的数字总数有多少个?
答案:9+8*9+8*9*9+8*9*9*9+8*9*9*9*9+8*9*9*9*9*9

题目:25匹马5个跑道,怎样选出最快的5匹来?最少的次数。如果选3次呢?
答案:选5个最少8次,最多9次;
选3个,只需要比较7次。

题目:64匹马,8条跑道,分几次可以选出最快的4匹?
答案:11次。

首先:分为9组分别进行比赛后得到每一组的比赛名次,比赛场次:9;
然后:将9组的每组第一名比赛,得到第一名,肯定是所有马的第一名;比赛场次:1
最后:剩下马中有资格角逐前四名的马有A2、A3、A4、B1、B2、B3、C1、C2、D1,刚好有9匹马,在进行一场比赛就可以了,比赛场次:1

从数组中找出连续的最大值
如输入1,-3,5,5,-6,-2,-7 输出10
我自己写的maxSum()方法只通过百分之50
舍友的maxSum2()方法全通过了 不知道我漏掉哪里了 先记录一下

… 理解了 我输出的时候从0开始了 真是蠢哭自己 如果最大是负数就输出错了 让max从a0开始就好了 一个教训…

public class xiechengoj1 {
    
     static int maxSum(int[] a) {
         int x[]=new int[a.length];
         x[0]=a[0];
         for(int i=1;i<a.length;i++){
             if(a[i]>x[i-1]+a[i]){
                 x[i]=a[i];
             }else
                 x[i]=x[i-1]+a[i];
         }
         int max=0;
         for(int i=0;i<a.length;i++){
             if(x[i]>max)
                 max=x[i];
         }
         for(int i=0;i<a.length;i++)
             System.out.print(x[i]+" ");
         return max;
        }
     
     static int maxSum2(int[] a) {
         int temp=a[0];
         int sum=a[0];
         for(int i=1;i<a.length;i++){
             if(temp<0){
                temp=0;
            }
            temp+=a[i];
            if(sum<temp)
                sum=temp;
         }
         return sum;
     }
    /******************************结束写代码******************************/


        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            
            String s=sc.nextLine();
            String [] x=s.split(" ");
            int [] a=new int[x.length];
            for(int i=0;i<a.length;i++)
                a[i]=Integer.parseInt(x[i]);
            int res;
            
            res = maxSum(a);
            System.out.println(String.valueOf(res));  
            System.out.println(maxSum2(a)); 
//5 5 5 9 -23 -34 3 399 -444 3
        }
    
}

从一堆数里选出第一个只出现一次的数,时间复杂度0(n)
如1,1,2,2,3,3,4,5,4,8 输出 5

public class xiechengoj2 {

        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            String s=in.nextLine();
            String s1[]=s.split(",");
            HashSet<Integer> set=new HashSet<>();
            HashMap<Integer, Integer> map=new HashMap<>();
            int a[]=new int[s1.length];
            for(int i=0;i<s1.length;i++)
                a[i]=Integer.parseInt(s1[i]);
            for(int i=0;i<s1.length;i++){
                if(set.add(a[i])){
                    map.put(a[i],0);
                }else{
                    map.put(a[i],1);
                }
            }
            Iterator iter = map.entrySet().iterator();
            while(iter.hasNext()){
                Map.Entry entry=(Map.Entry)iter.next();
                int value=(int) entry.getValue();
                if(value==0){
                    System.out.println((int) entry.getKey());                   
                    break;
                }
            }
    
        }
}
上一篇 下一篇

猜你喜欢

热点阅读