人一旦悟透了就会变得缄默沉静,不是没有与人共处的才干,而是没有了逢人作戏的喜好.


解决这些问题假如需求对数组进行排序,那不好意思…

数组的最值问题


1. 求数组的最大值

	public int getMax(int[] array) {
// 留心这儿,求最大值时,将初始值设置为Integer.MIN_VALUE
int max = Integer.MIN_VALU复杂度为nlogn的排序算法E;
for(int n : array){
max = Math.max(max,n);
}
return max;
}

练习地址:LintCode – 2176 求数组最大值


2. 求数组的最小值

public int getMin(int[] array){
// 留心这儿,求最小值时,将数组排序初始值设置为Integer.MAX复杂度o(1)什么意思_VALUE
int min = Integer.MAX_VALUE;
for(int n : array){
min = Math.min(min,n);
}
return min;
}

3. 求数组的次小值(要点)

最小值和次小值虽然只有一字之差,可是”差之毫厘,谬之千里”啊。

这儿的条件是不排序

1. 两次循环:时间复杂度O(复杂度怎样核算的n)
 p复杂度最优ublic static int finSecMin(数组指针int[] nums){
int min = Integer.MAX_VALUE;
in复杂度t secMin = Integer.M数组词AX_VALUE;
for(复杂度最优int i  = 0; i < nums.length; i++复杂度为nlogn的排序算法){
min = Math.min数组初始化(nums[i], min复杂度剖析);
}
System.out.println("最小值:"+min);
for (int i = 0; i < nums.length; i++) {
if(nums[数组c语言i] > min){
secMin = Math.min(nums[i],secMin);
}
}
System.out.println("次最小值:"+se复杂度o(1)什么意思cMin);
return secMin;
}

还有更好的方案吗?答案是必定的。

2. 最优解:时间复杂度O(n)

经过一次for循环,就可以得到最小值次小值

 public static i数组和链表的差异nt  finSecMin(int[] nums){
int min = Integer.MAX_VALUE;
int secMin = Integer.MAX_VALUE;
for (int i = 0; i < nums.length; i++) {
if(nums[i] < min){
secMin = min;数组去重
min = n复杂度为nlogn的排序算法ums[i];
}else if(nums[i] < se复杂度最优cMin){
secMin = nums[i];
}
}
System.out.println("最小值复杂度符号:"+min+",次最小值:"+secMin);
return secMin;
}

这儿对这些 经典的解法数组排序(不排序) 进行总结,相信这些小工具在你刷题的道路上复杂度英文能给你带来许多协助…