小景哥哥

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

强烈推荐

用两个栈实现队列

    5.用两个栈实现队列

    题目描述
    用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
     
     
    import java.util.Stack;
     
    public class Solution {
        Stack<Integer> stack1 = new Stack<Integer>();
        Stack<Integer> stack2 = new Stack<Integer>();
        
        public void push(int node) {
            stack1.push(node);
       }
        
       public int pop() throws Exception {
            if(!stack2.isEmpty())
                return stack2.pop();
            else{
                while(!stack1.isEmpty()) {
                    stack2.push(stack1.pop());
                }
                if(stack2.isEmpty())
                    throw new Exception("query is empty");
                return stack2.pop();
            }
        }
        
    }
    阅读全文>>

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

2018-08-10

39.平衡二叉树

    39.平衡二叉树

    题目描述

    输入一棵二叉树,判断该二叉树是否是平衡二叉树。
     


    public class Solution {
        public boolean IsBalanced_Solution(TreeNode root) {
            if(root == null)
                return true;
            int left = TreeDepth(root.left);
            int right = TreeDepth(root.right);
            int diff = left - right;
            if( diff > 1 || diff < -1)
                return false;
            return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
        }
        
        public int TreeDepth(TreeNode root) {
            if(root == null)
                return 0;
            if(root != null && root.left == null && root.right == null)
                return 1;
            int leftLen = TreeDepth(root.left);
            int rightLen = TreeDepth(root.right);
            return leftLen > rightLen? leftLen + 1: rightLen + 1;
        }
    }

     

    阅读全文>>

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

2018-08-23

二维数组中的查找

    1. 二维数组中的查找

     

    题目描述:

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

     

     


     

    public boolean Find(int target, int[][] array) {

            int rows = array.length;

            int cols = array[0].length;

            int i = rows - 1, j = 0;

            while (i >= 0 && j < cols) {

                if (target < array[i][j])

                    i--;

                else if (target > array[i][j])

                    j++;

                else

                    return true;

            }

            return false;

    }


     

    阅读全文>>

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

2018-08-10

1039. 到底买不买(20)-浙大PAT乙级真题java实现

    1039. 到底买不买(20) 
    小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色.例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。 
    这里写图片描述 
    输入格式: 
    每个输入包含1个测试用例。每个测试用例分别在2行中先后给出摊主的珠串和小红想做的珠串,两串都不超过1000个珠子。 
    输出格式: 
    如果可以买,则在一行中输出“Yes”以及有多少多余的珠子;如果不可以买,则在一行中输出“No”以及缺了多少珠子。其间以1个空格分隔。 
    输入样例1: 
    ppRYYGrrYBR2258 
    YrR8RrY 
    输出样例1: 
    Yes 8 
    输入样例2: 
    ppRYYGrrYB225 
    YrR8RrY 
    输出样例2: 
    No 2


    阅读全文>>

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

2018-01-23

梦想天空分外蓝

    你把时间花在哪里,收获就会在哪里,你的梦想在哪里,你的努力就在哪里,那里的天空就分外蓝。耶和华对待每一个人都很公平,我们自己把自己的时间安排在什么地方,什么地方就会熠熠闪光。

    假如你很喜欢钢琴,比郎朗还喜欢,你可能从3岁开始就已经开始迷恋,在自觉不自觉地成长过程中,你就会花大把的时间在练习钢琴上,下课练习钢琴,晚上练习钢琴,周末练习钢琴,节假日练习钢琴,随着岁月的积累,你在钢琴上面的功夫就会在你人生道路上有所凸显,也许你超不过不了贝多芬,也许你成为不了郎朗,但是你在钢琴领域,肯定是小有名气,甚至是赫赫有名的。

    假如你很喜欢编程,你就会在潜移默化中时刻想去写代码,每天就是整天待在计算机机房里,一天敲代码几千行,还乐此不疲的想继续做下去。这样一转眼就是十年,十年的时间积淀,也许你超过不比尔盖茨,也许你赶不上乔布斯,也许你也没超过李开复,但是凭着你这么多年的付出,你最起码肯定是一个杰出的工程师,甚至还是某一领域的专家。

    假如你很喜欢英语,你就在日常中默默的做了很多学英语的事儿,每天都兴高采烈的背单词、说口语、去写作,别人娱乐可能是看一些娱乐节目消遣一下,而你消遣的方式可能就是看看美剧、和英语俱乐部的老外聊聊天,自觉不觉的就背了很多单词,看透了语法书,练就了一口标准的美音口语,还写得一手好字体。也许你在英语领域还不是一个显赫的英语教授,不像亚历山大那样能写出来《新概念》这样流行的著作,但是你肯定凭借自己优秀的英语水平,谋得一份很不错的工作。

    假如你很喜欢画画,你的房间里应该就是染料、画板、画笔的色彩斑斓的空间,你会在自己可以支配的时间,去临摹,去画画,去学习,去写生,也许你画过的画垒起来真的能超过自己的身高,真的可以说著作等身啊。在你的坚持下,你不但学会了素描,还学会了油画、水彩,你不但可以随手临摹,还可以即兴把心中所想呈现在画布上。虽然你赶不上梵高,也超不过米开朗基罗,也不如莫奈和毕加索,可是你还是小有名气,你还是觉得自己过的很快乐。

    人生最可悲的是,你喜欢的东西却没有坚持去做,每天都浑浑噩噩的度过了无聊的岁月。等到老的时候,心中一直怀揣着“我本可以的”的遗憾而心酸终老。不是说“梦想还是要有的,万一实现了呢”,而是有一种信念“假如此时不遗余力,能否给自己赢得一次第一”的捍卫和坚持自己所爱。

    没目标的人,心中无梦的人,每一天都是琐碎的,把每一天累加起来还是一个琐碎的人生。有目标的人,有梦想的人,每一天都是琐碎的,但是每一天累加起来就是一个完整的人生。

    你的梦想是什么呢?

    一天天的生活

    一边怀念 一边体验

    刚刚说了再见 又再见

    一段段的故事

    一边回顾 一边向前

    别人的情节总有我的画面

    只要有心就能看见

    从白云看到 不变蓝天

    从风雨寻回 梦的起点

    海阔天空的颜色

    就像梦想那么耀眼

    用心就能看见

    从陌生的脸 看到明天

    从熟悉经典 翻出新篇

    过眼的不只云烟

    有梦就有蓝天 相信就能看见

    美梦是个气球

    牵在手上 向往蓝天

    不管高低不曾远离 我视线

    生命是个舞台

    不用排练 尽情表演

    感动过的片段百看不厌

    只要有心就能看见

    从白云看到 不变蓝天

    从风雨寻回 梦的起点

    海阔天空的颜色

    就像梦想那么耀眼

    用心就能看见

    从陌生的脸 看到明天

    从熟悉经典 翻出新篇

    过眼的不只云烟

    相信梦想就能看见

    有太多一面之缘 值得被留恋

    总有感动的事 等待被发现

    梦想天空分外蓝 今夕何年

    Oh 看不厌

    用心就能看见

    从白云看到 不变蓝天

    从风雨寻回 梦的起点

    海阔天空的颜色

    就像梦想那么耀眼

    用心就能看见

    从陌生的脸 看到明天

    从熟悉经典 翻出新篇

    过眼的不只云烟

    有梦就有蓝天

    相信就能看见

    美梦是个气球

    牵在手上 向往蓝天

    不管高低不曾远离 我视线

    梦想是个诺言

    记在心上 写在面前

    因为相信 所以我看得见

    注:《梦想天空分外蓝》----陈奕迅

     

     

     

     

     

     

    阅读全文>>

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

2018-04-16

细观美剧

     

    作为一个不折不扣的美剧迷,我内心澎湃的小宇宙喷薄而出,细观美剧,感悟颇多。

    从《神盾局特工》到《闪电侠》,从《生活大爆炸》到《破产姐妹》,从《疑犯追踪》到《哥谭》,从《权利的游戏》到《西部世界》,从《天赋异禀》到《行尸走肉》,从《黑镜》到《福尔摩斯》,从《越狱》到《罪恶黑名单》,…,在美剧的世界里,你可以被强大的剧情牵引着,在扣人心弦的场景中遨游,在惊心动魄的格斗中历练,那感觉无与伦比。

    你可以跟着Coulson坐着昆式战斗机在世界各地穿越,你可以跟着quaker Daisy去震动全世界,你可以跟着Oliver或James去拯救一座城市,你可以跟着Max体验开放的美国文化,你可以跟着Shelden做去一个奇葩,你可以跟着Harry去93/4站台体验一个魔幻的奇妙世界,有太多的人物,有太多的角色,有太多的精彩,也有太多的无奈,但是美国大片的总体态势到最后都是英雄救美,完美结局。假如你看到最后结局很凄美,那我可以肯定的告诉你,你看的是假美剧。

    感悟一:需要很好的美国文化才能get到他们的笑点

    对于一些情景喜剧,比如《生活大爆炸》、《破产姐妹》等这种类型的美剧,真的需要一定的文化底蕴,才能在欣赏的过程中,体会他们所要表达的完整意义,才能get到他们的笑点,才能更好的了解到西方的文化底蕴和人文内涵。

    感悟而二:看美剧并不是仅仅浪费时间,真的可以提高英语水平

    英语一直作为短板的我,六级也是考了几次才低分飘过的人,在我考研的时候,每天都会看一集美剧,风雨无阻,大家都知道对于非英语专业的理科生来说英语单科分数线也就40分多一点,那年我的英语一成绩82(总分100),这对于一个非英语专业的普通人来说,已经相当可以了。

    感悟三:开拓视野,增长见识

    艺术来源于生活却高于生活。从体验美国文化层面来讲,还是能从一个侧面感受到开放的美国人民的生活气息,理解他们包容的意识形态,以及进取的人生态度。另一方面,不仅从感官上体验感受了一把视觉享受,还激发了想象力的脑洞,也拓展了你感知社会的眼光。

     记得字幕组、天天美剧这样的网站招募人员要求是必须看过100部美剧以上,我心里嗖的乐呵一下,奶奶的,老子看了200部也有了,虽然我口语不好,但是我听力好啊。

    我夜以继日的加班加点刷完了所有我喜欢看的美剧,然后突然就遇到了空前浩大的剧荒,没有一个可以看的了,这种感觉完全吞噬了我的小小内心,不知所措。苍天啊,大地啊,请赐予我一集美剧吧!

    问题:

    神盾局的Yoyo和闪电侠Barry谁更快?

    星际迷航为啥在太空中还能有声音?真空中不是没有粒子震动么?太空中没有空气,为啥会有火焰?

    钢铁侠遇到Max会出现什么情况?(这俩人都很好色)

    Michael和Imp合作越狱会不会更快一点?

    Finch和Sky谁的IT技术更牛?

    龙母是不是应该嫁给Oliver Queen而非John Snow?因为他俩经历很像啊。

     

    剧情:

    《神盾局》,最喜欢的美剧,没有之一。科幻+动作+大英雄主义,想象无边际,只有你想不到,没有做不到,各种奇异的人,各种奇妙的世界,完美无比。为捍卫正义可以牺牲一切。

    《闪电侠》,让Barry带你怀揣梦想穿越时空,拯救世界。

    《生活大爆炸》,一群个性独特的人毁你三观带你感悟生活,每三句话就出一个笑点,你要不笑那是因为你没文化。

    《破产姐妹》,大尺度带你闯进美国社会底层人民的生活。

    《哥谭》,为了心中的信仰拯救一座城。

    《行尸走肉》,人性的格斗。

    《黑镜》,科技太发达,脑洞大开。

     

     

     

     

    阅读全文>>

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

2018-04-13

35.数组中的逆序对

    35.数组中的逆序对
    题目描述
    在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
    输入描述:
    题目保证输入的数组中没有相同的数字
    数据范围:
    对于%50的数据,size<=10^4
    对于%75的数据,size<=10^5
    对于%100的数据,size<=2*10^5
    示例1:
    输入
    1,2,3,4,5,6,7,0
    输出
    7
     
     
     

    public class Solution {
        public int InversePairs(int [] array) {
            if(array == null || array.length == 0)
                return 0;
            int [] copy = new int[array.length];
            for(int i = 0; i < array.length; i++)
                copy[i] = array[i];
            int count = InversePairsCore(array, copy, 0, array.length - 1);
            return count;
        }
        
        public static int InversePairsCore(int[] array, int[] copy, int low, int high){
            if(low == high)
                return 0;
            int mid = (low + high) >> 1;
            int leftCount = InversePairsCore(array, copy, low, mid) % 1000000007;
            int rightCount = InversePairsCore(array, copy, mid + 1, high) % 1000000007;
            
            int count = 0;
            int i = mid;
            int j = high;
            int locCopy = high;
            while(i >= low && j > mid ){
                if(array[i] > array[j]){
                    count += j - mid;
                    copy[locCopy--] = array[i--];
                    if(count >= 1000000007)
                        count %= 1000000007;
                }else
                    copy[locCopy--] = array[j--];
            }
            for( ;i >= low; i--)
                copy[locCopy--] = array[i];
            for( ;j > mid; j--)
                copy[locCopy--] = array[j];
            for(int s = low; s <= high; s++)
                array[s] =  copy[s];
            return (leftCount + rightCount + count) % 1000000007;
        }
    }
     
     
     
     
     
     
     
     
     
     
     
     
     
    阅读全文>>

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

2018-08-23

54.字符流中第一个不重复的字符

    54.字符流中第一个不重复的字符

    题目描述

    请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
    输出描述:
    如果当前字符流没有存在出现一次的字符,返回#字符。

     



    public class Solution {

    int[] hashtable = new int[256];
        StringBuffer s = new StringBuffer();
        //Insert one char from stringstream
        public void Insert(char ch)
        {
            s.append(ch);
            if(hashtable[ch] == 0)
                hashtable[ch] = 1;
            else hashtable[ch] += 1;
        }
      //return the first appearence once char in current stringstream
        public char FirstAppearingOnce()
        {
          char[] str=s.toString().toCharArray();
          for(char c:str)
          {
              if(hashtable[c] == 1)
                  return c;
          }
          return '#';
        }
    }

    阅读全文>>

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

2018-08-24

包含min函数的栈

    20.包含min函数的栈

    题目描述:

    定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

    解题思路:利用一个辅助栈,来存放最小元素的值。当弹栈弹出最小元素时,辅助栈也弹出栈顶元素(当前栈中最小元素值)


    import java.util.Stack;


    public class Solution {
        
        private Stack<Integer> dataStack = new Stack<Integer>();
        private Stack<Integer> minStack = new Stack<Integer>();
        
        public void push(int node) {
            dataStack.push(node);
            if(minStack.isEmpty() || node <= minStack.peek())
                minStack.push(node);
        }
        
        public void pop() {
            if(dataStack.peek() == minStack.peek())
                minStack.pop();
            dataStack.pop();
            
        }
        
        public int top() {
            return dataStack.peek();
        }
        
        public int min() {
            return minStack.peek();
        }
    }

    阅读全文>>

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

2018-08-13

1057.数零壹(20)--PAT乙级真题java实现

    1057.数零壹(20)–PAT乙级真题java实现

    给定一串长度不超过10^5的字符串,本题要求你将其中所有英文字母的序号(字母a-z对应序号1-26,不分大小写)相加,得到整数N,然后再分析一下N的二进制表示中有多少0、多少1。例如给定字符串“PAT (Basic)”,其字母序号之和为:16+1+20+2+1+19+9+3=71,而71的二进制是1000111,即有3个0、4个1。

    输入格式:

    输入在一行中给出长度不超过105、以回车结束的字符串。

    输出格式:

    在一行中先后输出0的个数和1的个数,其间以空格分隔。

    输入样例:

    PAT (Basic)

    输出样例:

    3 4

     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
     
    public class Main {
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String s = br.readLine().toLowerCase();
     
            int sum = 0;
            char[] chs = s.toCharArray();
            for(int i = 0; i < chs.length; i++) {
                if(chs[i] >= 'a' && chs[i] <= 'z') {
                    sum += chs[i] - 'a' + 1;
                }
            }
            int one = 0, zero = 0;
            while(sum != 0) {
                if(sum % 2 == 0)
                    zero++;
                else
                    one++;
                sum = sum / 2;
            }
            System.out.println(zero + " " + one);
        }
    }
    阅读全文>>

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

2018-09-08