小景哥哥

世界很大,而我们还需要再成长!

强烈推荐

30.连续子数组的最大和

    30.连续子数组的最大和

    题目描述

    HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)
     

    public class Solution {
        public int FindGreatestSumOfSubArray(int[] array) {
            int result = array[0];
            int max = result;
            for(int i = 1; i < array.length; ++i){
                if(result <= 0){
                    result = 0;
                }
                result += array[i];
                if(max < result)
                    max = result;
            }
            return max;
        }
    }

    阅读全文>>

作者:Jason分类:【offer浏览(266评论(0

2018-08-23

1046. 划拳(15)-浙大PAT乙级真题java实现

    1046. 划拳(15) 
    划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。 
    下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。 
    输入格式: 
    输入第一行先给出一个正整数N(<=100),随后N行,每行给出一轮划拳的记录,格式为: 
    甲喊 甲划 乙喊 乙划 
    其中“喊”是喊出的数字,“划”是划出的数字,均为不超过100的正整数(两只手一起划)。 
    输出格式: 
    在一行中先后输出甲、乙两人喝酒的杯数,其间以一个空格分隔。 
    输入样例: 

    8 10 9 12 
    5 10 5 10 
    3 8 5 12 
    12 18 1 13 
    4 16 12 15 
    输出样例: 
    1 2


    阅读全文>>

作者:Jason分类:【pat浏览(402评论(0

2018-01-24

The story of six apples

    It goes without saying that sharing is the most marvelous talents of human beings, and it's not hard for us to get it as an ordinary person. Sharing happiness, happiness doubles.Sharing sorrow, sorrow halves. Now let's talk about the six apples of sharing friendship.

    My idol is Michael Yu. His courage and wisdom beyond my achievement and his story of six apples of sharing always entail me doing something enthusiastic to my friends. I like him and his story, and let me share them with you guys.

    Yu is a very kind and easygoing person. When he came to Peking University, he had acquaintance with a very mean person of his classmates. This guy came from a very rich family and he came to university dormitory carry with six apples from home every week. At first, Yu thought he would share the six apples to the six roommates which every one would get one apple. However, this guy ate one every day, just like a doctor saying: one apple a day, keeps the doctor away. Although the apple is his, no one can grab it to eat, and from then on this guy left an impression of selfish and mean. Several years later, this guy wanted to join his classmate's successful company, but everyone agreed that he could not join them for a simple reason, because he never showed the spirit of sharing when he was in college.So, for us, the first point in the university age, you have to share with your classmates what you have, feelings, thoughts and wealth. If I had six apples, I would share them to the six brothers in the dorm, one for each. When you have six apples, you can have many choices: you eat all of the apples, or you eat just one, and leave the five to the five bros. If you choose the former, then you can only eat apples; if you choose to exchange, you may obtain six different kind of fruit with different appearances, different colors, different tastes. In exchange, in the process of sharing your guys established a deep friendship, and you may also fall in love with somebody, if possible.

    Being the most intelligent creature on the beautiful blue planet entails us doing everything meaningful to our civilization. Sharing with your friends what you have, feelings, thoughts and wealth. May you have a wonderful life.


    阅读全文>>

作者:Jason分类:【心情浏览(453评论(0

2018-01-09

1023. 组个最小数 (20)-浙大PAT乙级真题java实现

    1023. 组个最小数 (20) 
    给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。现给定数字,请编写程序输出能够组成的最小的数。 
    输入格式: 
    每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥 
    有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。 
    输出格式: 
    在一行中输出能够组成的最小的数。 
    输入样例: 
    2 2 0 0 0 3 0 0 1 0 
    输出样例: 
    10015558


    阅读全文>>

作者:Jason分类:【pat浏览(318评论(0

2018-01-17

1027. 打印沙漏(20)-浙大PAT乙级真题java实现

    1027. 打印沙漏(20) 
    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印


    
    

     

     

     


    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式:

    输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。

    输出格式:

    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

    输入样例: 
    19 * 
    输出样例:


    
    

     

     

     


     

     

    阅读全文>>

作者:Jason分类:【pat浏览(373评论(0

2018-01-18

积极废人

    积极废人,指那些“爱给自己立flag,但永远做不到的人;尽管心态积极向上,行动却宛如废物,他们往往会在间歇性享乐后恐慌,时常为自己的懒惰自责。

     

    “积极废人”,尽管心态积极向上,行动却宛如废物”。Flag(意指公开树立的目标)太多,但时间太少,想偷懒的念头太多,但执行力太差,似乎成了不少人的通病,这也是“积极废人”一词能有市场的现实基础。

     

     

    离毕业论文还有两个月期限时,就立志“日行百字”,然而每天依旧睡到日上三竿,无所进展,硬生生拖到最后几天,才在“死线”的催赶和内心焦虑的折磨下,激发出“无限潜力”;大家天天嚷嚷自己太胖,找不到好看的小哥哥和小姐姐做朋友,因此要“每天奔赴健身房,一个月瘦15斤”,最终却总是在迈入健身房的前一分钟被下午茶的魅力勾走,一个月下来别说瘦了,可能还胖了五六斤。那些flag常活在我们的心里和口头上,却始终无法成为现实。

     

    “积极废人”一词中存在一对显著的矛盾:“积极”与“废人”。积极的心态,显然体现在他们的壮志豪情上,然而“废人”却不一定在说他们能力不足,只不过他们的行动力真的差到了极点。对这些人而言,想行动的念头活不过三秒钟,就被滚滚而来的懒惰念头“拍死”了。

     

    要想避免自己成为“积极废人”,最重要的还是要有执行力。对那些要写毕业论文的大学生来说,不开始搭个框架、写个绪论,后面的论文内容是不会自己平白无故生出来的。对那些想健身减重的人,不到健身房举铁,不在跑步机上跑个四五十分钟,又哪里谈得上取得成果呢?万事开头难,坚持下去则更难。

     

    与此同时,制定一个切实可行的目标也很重要,不要一味只想着让说出去的flag听起来好听,让自己看上去非常积极,但到结果上却无法完成,成为“废人”。“跳一跳就能够得着”的目标更容易让我们去付诸行动,而不是畏难而退,服于懒惰。

    立flag不是不行,但是,一旦立了,就要把它扶稳。Flag立得再多,只有实现得多,才是一个真正积极向上的好青年。我们要让积极的心态得以持续,而不能让一个“积极的人”变成“积极废人”。一字之差,差的只是落实的决心。

     

    懒癌晚期的我们,很多时候,总是持续性的混吃等死,间接性的踌躇满志。希望我们都可以仅仅立一个flag,然后把持之以恒铭记于心,并付诸努力,去追求自己的目标并为之付出等值的心血。

     

    愿你不要整天葛优瘫,愿你是一个积极、阳光、开朗的人,而不是一个积极废人。

     

    阅读全文>>

作者:小度分类:【热词浏览(579评论(0

2018-05-11

变态跳台阶

    9.变态跳台阶

    题目描述
    一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

    解题思路:

    关于本题,前提是n个台阶会有一次n阶的跳法。分析如下:

            f(1) = 1

            f(2) = f(2-1) + f(2-2)         //f(2-2) 表示2阶一次跳2阶的次数。

            f(3) = f(3-1) + f(3-2) + f(3-3) 

            ...

            f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n) 

            说明: 

            1)这里的f(n) 代表的是n个台阶有一次1,2,...n阶的 跳法数。

            2)n = 1时,只有1种跳法,f(1) = 1

            3) n = 2时,会有两个跳得方式,一次1阶或者2阶,这回归到了问题(1) ,f(2) = f(2-1) + f(2-2) 

            4) n = 3时,会有三种跳得方式,1阶、2阶、3阶,

                那么就是第一次跳出1阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3-2);第一次3阶,那么剩下f(3-3)

                因此结论是f(3) = f(3-1)+f(3-2)+f(3-3)

            5) n = n时,会有n中跳的方式,1阶、2阶...n阶,得出结论:

                f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + ... + f(n-1)  

            6) 由以上已经是一种结论,但是为了简单,我们可以继续简化:

                f(n-1) = f(0) + f(1)+f(2)+f(3) + ... + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2)

                f(n) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2) + f(n-1) = f(n-1) + f(n-1)

                可以得出:

                f(n) = 2*f(n-1)

            7) 得出最终结论,在n阶台阶,一次有1、2、...n阶的跳的方式时,总得跳法为:

                       | 1       ,(n=0 ) 

            f(n) =  | 1       ,(n=1 )

                       | 2*f(n-1),(n>=2)

    //java代码实现
      public class Solution {

      public int JumpFloorII(int target) {
            if (target <= 0) {
                return -1;
            } else if (target == 1) {
                return 1;
            } else {
                return 2 * JumpFloorII(target - 1);
            }
        }

        //Another solution
        public int JumpFloorII2(int target){
            int a=1; 
            return a<<(target-1);
        }
    }

    阅读全文>>

作者:Jason分类:【offer浏览(310评论(0

2018-08-10

1066. 图像过滤(15)–PAT乙级真题java实现

    1066. 图像过滤(15)–PAT乙级真题java实现
     
    图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。
    输入格式:
    输入在第一行给出一幅图像的分辨率,即两个正整数M和N(0 < M, N <= 500),另外是待过滤的灰度值区间端点A和B(0 <= A < B <= 255)、以及指定的替换灰度值。随后M行,每行给出N个像素点的灰度值,其间以空格分隔。所有灰度值都在[0, 255]区间内。
    输出格式:
    输出按要求过滤后的图像。即输出M行,每行N个像素灰度值,每个灰度值占3位(例如黑色要显示为000),其间以一个空格分隔。行首尾不得有多余空格。
    输入样例:
    3 5 100 150 0
    3 189 254 101 119
    150 233 151 99 100
    88 123 149 0 255
    输出样例:
    003 189 254 000 000
    000 233 151 099 000
    088 000 000 000 255
     
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) throws IOException{
            Scanner sc = new Scanner(System.in);
            int M = sc.nextInt(), N = sc.nextInt(), A = sc.nextInt(),
                     B = sc.nextInt(), filter = sc.nextInt();
            for(int i = 0; i < M; i++) {
                for(int j = 0; j < N; j++) {
                    int rgb = sc.nextInt();
                    if(rgb >= A && rgb <= B) {
                        rgb = filter;
                    }
                    if(j != 0)
                        System.out.print(" ");
                    System.out.printf("%03d",rgb);
                }
                System.out.println();
            }
            
        }
    }
    //solution two
    class solution{
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String[] s = br.readLine().split(" ");
            int M = Integer.parseInt(s[0]), N = Integer.parseInt(s[1]),
                    A = Integer.parseInt(s[2]), B = Integer.parseInt(s[3]),
                    filter = Integer.parseInt(s[4]);
            for(int i = 0; i < M; i++) {
                String[] sp = br.readLine().split(" ");
                for(int j = 0; j < N; j++) {
                    int rgb = Integer.parseInt(sp[j]);
                    if(rgb >= A && rgb <= B) {
                        rgb = filter;
                    }
                    if(j != 0)
                        System.out.print(" ");
                    System.out.printf("%03d",rgb);
                }
                System.out.println();
            }
        }
    }
    阅读全文>>

作者:Jason分类:【pat浏览(445评论(0

2018-09-09

1070. 结绳(25)–PAT乙级真题java实现

    1070. 结绳(25)–PAT乙级真题java实现
     
    给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连。每次串连后,原来两段绳子的长度就会减半。 
    给定N段绳子的长度,你需要找出它们能串成的绳子的最大长度。
    这里写图片描述

    输入格式: 
    每个输入包含1个测试用例。每个测试用例第1行给出正整数N (2 <= N <= 104);第2行给出N个正整数,即原始绳段的长度,数字间以空格分隔。所有整数都不超过104。 
    输出格式: 
    在一行中输出能够串成的绳子的最大长度。结果向下取整,即取为不超过最大长度的最近整数。 
    输入样例: 

    10 15 12 3 4 13 1 15 
    输出样例: 
    14
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    public class Main {
        
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(br.readLine());
            int[] s = new int[n];
            String[] sp = br.readLine().split(" ");
            for(int i = 0; i < n; i++)
                s[i]  = Integer.parseInt(sp[i]);
            Arrays.sort(s);
            int res = s[0];
            for(int i = 1; i < n; i++)
                res = (res + s[i]) / 2;
            System.out.println(res);
        }
    }

     

    阅读全文>>

作者:小景哥哥分类:【pat浏览(476评论(0

2018-09-09

1009. 说反话 (20)-浙大PAT乙级真题java实现

    1009. 说反话 (20)
    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
    输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
    输出格式:每个测试用例的输出占一行,输出倒序后的句子。
    输入样例:
    Hello World Here I Come
    输出样例:
    输入样例:
    Come I Here World Hello 


    阅读全文>>

作者:Jason分类:【pat浏览(361评论(0

2018-01-04