心态这件事在人的一生中比知识,财富都要重要,不管遇到什么事,能有一个平常心,稳健的心去对待,都一定会有一个好的结果,如果不是,那也没有什么遗憾,起码自己绝对是在正常思维下,尽己所能。
昨天去面试一个公司,两个人面了我两个半小时,疯狂的思考和回答每一个问题,但是最后还是没什么希望应该,因为最关键的一个机试算法没有做出来,我自己也完全没有想到,尽管这个问题没有超过 我的能力范围,但是还是因为紧张和近期太疲惫,导致自己当时的心态很不好,思维有点乱。
给一个数组,求出这个数组第三大的那个数。这个问题,如果我去排序,那我肯定就输了,排序不是一次遍历能够出来的。这种问题明显一次遍历就能出来。所以我们不需要对整个数组进行排序。只需要找出最大的那三个就ok;
public static void testFunc(int a[]){ Integer max=null; Integer max_1=null; Integer max_2=null; if (a==null) { System.out.println("null"); }else if(a.length==1){ System.out.println(a[0]); }else if (a.length==2) { System.out.println(Math.max(a[0], a[1])); }else { for(int i=0 ;i<a.length;i++){ if(max==null){ max=a[i]; continue; } if(max_1==null){ if(a[i]>max){ max_1=max; max=a[i]; }else if (a[i]<max) { //上面的三个max变量,不存相同的值,所以这个直接跳过=max的情况 max_1=a[i]; } continue; } if(max_2==null){ if(a[i]<max_1){ max_2=a[i]; }else if (a[i]<max&&a[i]>max_1) { max_2=max_1; max_1=a[i]; }else if (a[i]>max) { max_2=max_1; max_1=max; max=a[i]; } continue; } if(a[i]>max){ max_2=max_1; max_1=max; max=a[i]; }else if (a[i]>max_1&&a[i]<max) { max_2=max_1; max_1=a[i]; }else if (a[i]>max_2&&a[i]<max_1) { max_2=a[i]; } } if (max_2==null) { System.out.println( max); }else { System.out.println( max_2); } } }思路就是,这三个最大的数,在数组满足数组长度大于三的时候,我一定要初始化他们,不能对他们全部初始化那么就continue,并且不存相同的数。在初始化结束之后,进行简单的判断就ok。