一、每日一题
36. 有效的数独 - 力扣(LeetCode) (leetcode-cn.com)
思路:首先每开始变量一行时,就将行、列、方阵数组重新初始化为0。然后检查所在位置的行里面是否已经出现多该数字,若没有出现过,则要进行标记,为后面的查找提供依据,已经出现过则直接返回false。然后所在位置的行也是一样,还有就是所在的方阵,数独矩阵是由九个固定的矩阵构成,根据所在的行和列获得所在位置位于那个矩阵,然后检查在该矩阵内是否已经出现过所在位置的数字未出现过则进行标记,出现过了则直接返回false。
代码:
class Solution
{
public boolean isValidSudoku(char[][] board)
{
for(int i=0; i<9; i++)
{
int []r=new int[9];//每换一行,就数组都重新变成0
int []c=new int[9];
int []m=new int[9];
for(int j=0; j<9; j++)
{
if(board[i][j]!='.')
{
if(r[board[i][j]-'1']==1)//在行里面这个数字已经出现过
{
return false;
}
else
{
r[board[i][j]-'1']=1;//标记这个数出现过
}
}
if(board[j][i] != '.')
{
if(c[board[j][i] - '1'] == 1)//同上面的行
{
return false;
}
else
{
c[board[j][i] - '1'] = 1;
}
}
int x = 3 * (i/3) + j/3;//(i代表行的增加、j代表列的增加)就可以根据当前的行列关系计算出当前处于第几个方阵
int y= 3 * (i%3) + j%3;
if(board[x][y] != '.')
{
if(m[board[x][y] - '1'] == 1)
{
return false;
}
else
{
m[board[x][y] - '1'] = 1;
}
}
}
}
return true;
}
}
二、Java学习
1.方法重载和重写(覆盖):方法重载是同一个类里面方法名相同,形参列表不同。方法重写是是父类与子类的同名方法中,子类将父类的该方法中的内容改变了,父类与子类之间也是可以发生方法重载的,子类继承了父类的一些可以继承的方法,然后子类创建了一个方法名相同,形参列表不同的方法,也就形成了父类与子类的方法重载。父类方法被重写(覆盖)后子类可通过super关键字调用父类的实例方法,或通过父类类名调用父类的类方法。
public class Bird {
public void fly()
{
System.out.println("我在天空自由自在的飞翔");
}
public static void main(String[] args)
{
Bird y=new Bird();
y.fly();
}
}
public class Ostrich extends Bird{
public void fly()//重写fly()方法
{
System.out.println("我只能在地上奔跑");
}
public static void main(String[] args)
{
Ostrich os=new Ostrich();
os.fly();
}
}
class Baseclass
{
public int a=5;
}
public class Subclass extends BaseClass{
public int a=7;//将父类中的成员变量a隐藏
public void accessOwner()
{
System.out.println(a);
}
public void accessBase()
{
System.out.println(super.a);
}
public static void main(String[] args)
{
Subclass sc=new Subclass();//实践上系统开了两个空间,一个是存父类Baseclass的成员变量a,一个是存子类Subclass的成员变量a
sc.accessOwner();//输出7
sc.accessBase();//输出5
}
}
2.super关键字
super关键字的使用者只能是对象,它的作用是限定对象只能调用从父类继承到的实例变量和实例方法,因此不能调用用static修饰的类方法,调用类方法的只能说类,而super关键字的使用者只能是对象。
在构造器执行过程中一连串调用了父类的构造方法,父类的构造方法又继续向下调用它的父类的构造方法,但是实际上对象只创建了一个。
super关键字代表的就是当前对象的父类特征。
this.和super.不能同时出现在构造器中,因为两者都只能在构造器的第一行出现。
当创建一个子类的实例对象时,系统会为子类中的实例变量分配空间,同时也会为子类从直接父类和间接父类继承到的实例变量分配空间。
子类定义与父类同名的变量,并不会完全覆盖,只是简单的隐藏。
class Parent
{
public String tag="GOODGOODSTUDY";
}
class Derived extends Parent
{
private String tag="DAYDADYUP";
}
public class HideTest {
public static void main(String[] args)
{
Derived d=new Derived();
//System.out.println(d.tag);tag在Derived为private
//System.out.println(super.tag);static方法中不能出现super
System.out.println(((Parent)d).tag);//显式的向上转型为Parent
}
}
三、SQL学习
查找GPA最高值_牛客题霸_牛客网 (nowcoder.com)
SELECT ROUND(MAX(gpa),1) FROM user_profile WHERE university='复旦大学';
计算男生人数以及平均GPA_牛客题霸_牛客网 (nowcoder.com)
SELECT COUNT(gender),ROUND(AVG(gpa),1) FROM user_profile WHERE gender='male';
分组过滤练习题_牛客题霸_牛客网 (nowcoder.com)
SELECT university,ROUND(AVG(question_cnt),3) avg_question_cnt,ROUND(AVG(answer_cnt),3) avg_answer_cnt FROM user_profile GROUP BY university HAVING AVG(question_cnt)<5 OR AVG(answer_cnt)<20;
分组排序练习题_牛客题霸_牛客网 (nowcoder.com)
SELECT university,AVG(question_cnt) avg_question_cnt FROM user_profile GROUP BY university ORDER BY avg_question_cnt ASC;