用友2018秋招Java笔试题--奇偶排序、最大字数组和、SQL

一、 题目描述
在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。
请完成sort的代码实现(
void sort(int[]a)
{

}
例如: 当输入a = {8,4,1,6,7,4,9,6,4},
a = {1,7,9,8,4,6,4,6,4}为一种满足条件的排序结果。

//测试类
class SingleSort{
    public static void main(String[] args) {
        int []arr=new int[]{8,4,1,6,7,4,9,6,4};
        arr=singleSort(arr);
        //输出:[1, 7, 9, 4, 6, 4, 6, 4, 8]
        System.out.println(Arrays.toString(arr));
    }
    
	//直接按题目要求写的,定义一个临时数组替换,栈的思想
    public static int[] singleSort(int []arr){
        int[]tmpArr=new int[arr.length];
        int i=0,low=0,high=tmpArr.length-1;
        while(low<=high){
            if(arr[i]%2==1)
                tmpArr[low++]=arr[i++];
            else
                tmpArr[high--]=arr[i++];
            }
             arr=tmpArr; 
          return arr;
    }
}

二、 题目描述
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,那么该数组中连续的最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。

//测试类
class LongestSubArray{
    public static void main(String[] args) {
        int[]arr=new int[]{1, -2, 3, 10, -4, 7, 2, -5};
        int sum=subArray(arr);
        //输出18
        System.out.println(sum);
    }
    
	//定义一个临时变量,元素和大于零相加,小于零舍弃
    public static int subArray(int[]arr) {
       if(arr==null || arr.length==0)
            return 0;
        int curr=0,res=0;
        for (int i = 0; i < arr.length; i++) {
            if(curr<0)
                curr=arr[i];
            else{
                curr+=arr[i];
                res=Math.max(res,curr);
            }
        }
        return res;
    }
}

三、题目描述
Student(S#,Sname,Sage,Ssex) 学生表,
Course(C#,Cname,T#) 课程表,
SC(S#,C#,score) 成绩表,
Teacher(T#,Tname) 教师表 。
其中,S#代表学生号,C#代表课程号,T#代表教师号。
根据上述描述,请写出如下的查询语句:
1、查询姓“李”的老师的个数;
2、查询没学过“叶平”老师课的同学的学号、姓名;
3、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名。

#  查询姓“李”的老师的个数
SELECT COUNT(Tname) FROM Teacher WHERE Tname like '李%'

# 查询没学过“叶平”老师课的同学的学号、姓名
SELECT `S#`,Sname FROM Student
  WHERE `S#` NOT IN
   (
    SELECT `S#` FROM  SC
     INNER JOIN Course ON SC.`C#`=Course.`C#`
     INNER JOIN Teacher ON Course.`T#`=Teacher.`T#`    
      WHERE Teacher.`Tname`='叶平'
   )
   
# 查询学过“001”并且也学过编号“002”课程的同学的学号、姓名
SELECT Student.`S#`,Student.Sname FROM Student,SC 
WHERE Student.`S#`=SC.`S#` AND SC.`C#`='001'AND 
EXISTS( SELECT * FROM SC AS SC_2 WHERE SC_2.`S#`=SC.`S#` AND SC_2.`C#`='002'); 

猜你喜欢

转载自blog.csdn.net/waS_TransvolnoS/article/details/93486431