每日练习8.14

1.如下SQL语句中,____可能返回null值。
(1) select count(*) from t1;
(2) select max(col1) from t1;
(3) select concat(‘max=’,max(col1)) from t1;

[解析]
(1)不可能出现null,如果表中没有记录,返回0;
(2)和(3)一般情况不会出现null,如果表中没有记录时,max(col)会返回null,concat用来连接字符串,一个为null,则结果为null。

2.以下哪一句从表TABLE_NAME中提取前10条记录?
A.select * from TABLE_NAME where rowcount=10
B select TOP 10 * from TABLE_NAME
C select TOP of 10 * from TABLE_NAME
D select * from TABLE_NAME where rowcount<=10

//从表TABLE_NAME中提取前10条记录
Sql server: select TOP N * from TABLE_NAME;
MySQL: select * from TABLE_NAME limit 0,10;
Oracle: slelect * from TABLE_NAME where rownum<=10;

3.查找 student表中所有电话号码(列名:telephone)的第一位为8或6,第三位为0的电话号码
A SELECT telephone FROM student WHERE telephone LIKE ‘[8,6]%0*’
B SELECT telephone FROM student WHERE telephone LIKE ‘(8,6)0%’
C SELECT telephone FROM student WHERE telephone LIKE ‘[8,6]_0%’
D SELECT telephone FROM student WHERE telephone LIKE ‘[8,6]_0

"_"匹配任何单个字符
"%"匹配任意数目字符(包括零个字符)
"[ ]"匹配在方括号中的任意一个字符

编程题1
链接:https://www.nowcoder.com/questionTerminal/f5805cc389394cf69d89b29c0430ff27
来源:牛客网

给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0…K],右部分A[K+1…N-1],K可以取值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少?

//这两个数中有一个肯定是数组的最大值。要使得差值最大,那么另一边的最大值应尽可能的小。 //假设最大值在左边,那么对于最大值右边的数组有很多种分法,每一种分法肯定都包含数组最后一个数字即A[n-1]。
//如果不取A[n-1],取最后一个数字和最大值中间的任一数字A[i]。若A[i]大于A[n-1],那还不如取最后一个数字;
//假设最大值在右边,同理左半边取最左端数字。
//只需用数组最大值减去数组两端较小的那个值即可。
public class MaxGap {
    public static int findMaxGap(int[] A, int n) {
        int max = 0;
        for(int i=1;i<n;i++){
            if(A[i]>A[max])
                max = i;
        }
        int temp1 = A[max] - A[0];
        int temp2 = A[max] - A[n-1];
        if (temp1<temp2){
            return temp2;
        }
        return temp1;
    }
}

编程题2
对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。
给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。

public class Printer {
    public int[] clockwisePrint(int[][] mat, int n, int m) {
        int a[] = new int[m*n];
        int i = 0;
        int j = 0;
        int k = 0;
        int startX = 0;
        int startY = 0;
        int endX = n-1;
        int endY = m-1;
        while(startX<=endX && startY<=endY){
            //只剩下一行
            if(startX == endX){
                for( ;j<=endY;j++,k++){
                    a[k] = mat[startX][j];
                }
                return a;
            }
            //只剩下一列
            if(startY == endY){
                for( ;i<=endX;i++,k++){
                    a[k] = mat[i][startY];
                }
                return a;
            }
            //将矩阵上边除了右顶点添加到返回的数组中
            for( ;j<endY;j++,k++){
                a[k] = mat[i][j];
            }
            //将矩阵右边除了下顶点添加到返回的数组中
            for( ;i<endX;i++,k++){
                a[k] = mat[i][j];
            }
            //将矩阵下边除了左顶点添加到返回的数组中
            for( ;j>startX;j--,k++){
                a[k] = mat[i][j];
            }
            //将矩阵左边除了上顶点添加到返回的数组中
            for( ;i>startY;i--,k++){
                a[k] = mat[i][j];
            }
            i++;
            j++;
            startX++;
            startY++;
            endX--;
            endY--;

        }
        return a;
    }

    public static void main(String[] args) {
        int [][] a={{1,2,3},{4,5,6},{7,8,9}};
        int [] b = new Printer().clockwisePrint(a,3,3);
        for (int item:b) {
            System.out.print(item+" ");
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值