随便写几句

心态这件事在人的一生中比知识,财富都要重要,不管遇到什么事,能有一个平常心,稳健的心去对待,都一定会有一个好的结果,如果不是,那也没有什么遗憾,起码自己绝对是在正常思维下,尽己所能。

昨天去面试一个公司,两个人面了我两个半小时,疯狂的思考和回答每一个问题,但是最后还是没什么希望应该,因为最关键的一个机试算法没有做出来,我自己也完全没有想到,尽管这个问题没有超过 我的能力范围,但是还是因为紧张和近期太疲惫,导致自己当时的心态很不好,思维有点乱。


给一个数组,求出这个数组第三大的那个数。这个问题,如果我去排序,那我肯定就输了,排序不是一次遍历能够出来的。这种问题明显一次遍历就能出来。所以我们不需要对整个数组进行排序。只需要找出最大的那三个就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。


猜你喜欢

转载自blog.csdn.net/u010365819/article/details/80263129
今日推荐