##Leetcode基础刷题之(88. Merge Sorted Array)
.
2019-02-26 吴亲库里 库里的深夜食堂
给定两个排序数组,合并他们,把nums2这个数组合并到nums1,而不是变成一个新的数组
num1=[1,2,3,000], m=3,num2=[2,5,6],n=3;最终结果[1,2,2,3,5,6]
最后归并到nums1数组采用的是引用赋值,所以我们在归并的时候应该从数组的尾部进行判断插入,如果是从首部,那么归并好的数值可能会覆盖掉原先还未进行归并的数组$num1上的值,再定义个变量用来存储合并之后数组的最后索引位置,所以整体的思想是,从两个数组的最后值开始进行比较,比较一次自减索引值,只要他们的索引值不小于0(0就是数组第一个数),如果当中哪个小于0了,说明此时当前数组已无可比较元素,那么把另一个数组之后的数值全部依次插入到$nums1中,假如当前相对索引处的值一方大于另一方,那么就把大的那一方值插入到当前新数组的索引处(大的在数组后面),因为是引用传值,最后$nums1数组合并以后变成一个新的有序数组
function merge(&$nums1, $m, $nums2, $n) {
$index1=$m-1;$index2=$n-1; //从尾部开始进行归并,如果从首部开始,归并好的值会覆盖掉未归并的值,这里使用引用赋值
$count_index=$m+$n-1; //
while($index1>=0 || $index2>=0){
if($index1<0){
$nums1[$count_index--]=$nums2[$index2--];
}else if ($index2<0){
$nums1[$count_index--]=$nums1[$index1--];
}else if($nums1[$index1]>$nums2[$index2]){
$nums1[$count_index--]=$nums1[$index1--];
}else{
$nums1[$count_index--]=$nums2[$index2--];
}
}
}
查找出所有超过5名学生的班级,最后显示的是班级名称
HAVING 表示的是(group by)以后的筛选条件,用在聚合函数中,意思和where是一样的,只是where不能和聚合函数一起使用 ,最后统计课程不小于5位(条件),关键词DISTINCT用于去掉重复的student.
SELECT class FROM courses Group BY class HAVING count(DISTINCT student) >=5
