早上起的很匆忙,每次都是卡点到班。(早饭:一杯粥)
1.上午的近代史纲要课学了Java基础--听的黑马程序员的课。(学到了hashmap这个地方,前面学习了(泛型类和泛型方法和通配符,还有可变参数和Map的基本操作,获取键值什么的,个人觉得泛型挺有用的,相对来说通配符有点多余了,可变参数中如果有其它参数,则可变参数必须放到最后,试了一下不能有两个可变参数。还有就是Map的遍历,用的是增强for遍历获得键,然后用键通过方法获得值来实现遍历。现在到了Map的遍历方法。之前学的也有些遗忘,学完了再复习吧)
2.上午的Java课学了MySQL数据库(在老师的紧盯下学其他的,还是有点担惊受怕,把昨天学的DDL复习了一遍,又学习了DML和DQL,DQL学到了分组查询,DML主要是对表的操作,有insert、update、delete。即增改删;DQL是查询语言,基础查询:就是普通的字段什么的查,select语句,from语句;在条件查询里增加了where,在聚合函数,主要是是对表的某一列来操作,有sum、max、min、count、avg(平均值),分组里有group by,如果用了where判断过,那么后面的判断用having。)
3.下午的高数课学了MySQL数据库(学的内容就是上面那些)还把大致的上午Java学习的写了一遍代码和Javascript。(js因为之前看过,就相当于跳着看,只看案例,做一遍案例,跟着过,现在到了循环那里,由于之前学过c语言,所以学起来其他语言就有共性,比较容易学。)
4.晚上吃饭去,吃完饭有晚课;通识课啦,又要水一水,这个老师提问哎。吃过饭来到教室,准备刷leetcode。
5.上通识课的时候,没有带电脑,就在我的madpad11上刷了两道中等难度的题,花了我两节课的时间,发现自己的算法基础真的很菜,一道题是反转整数且范围限制在int类型,这道题我刚开始用了数组把他一个个除十取余来做,放进数组,在从头取出来转换为一个整数,比较Integer的最大最小值,看了答案发现数组是多余的,当我取出来的时候直接在给另一个变量直接拼成整数比较就好
题目1:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
第一遍代码:
class Solution {
public int reverse(int x) {
//建数组
ArrayList list=new ArrayList();
if(x==Integer.MIN_VALUE) return 0;
int m=1;
//转换成正整数
if(x<0){m=-1;x=-x;}
//除十取余放到数组里
while(x!=0){
int cur=x%10;
x=x/10;
list.add(cur);
}
double d=0;
int len=list.size(),i=0;
//遍历数组取出余数
while(iInteger.MAX_VALUE||d
第二遍:
class Solution {
public int reverse(int x) {
if(x==Integer.MIN_VALUE) return 0;
int m=1;
double d=0;
if(x<0){m=-1;x=-x;}
//在这里直接转换了,根本用不到数组
while(x!=0){
int cur=x%10;
x=x/10;
d=d*10+cur;
}
d=d*m;
if(d>Integer.MAX_VALUE||d
看了答案解析后:(用数学方法解决)
class Solution {
public int reverse(int x) {
int rev=0;
while(x!=0){
//注意这个判断,是整个算法的关键
if(revInteger.MAX_VALUE/10) return 0;
int cur=x%10;
x=x/10;
rev=rev*10+cur;
}
return rev;
}
}
第二道题更是难到我了:这道题我开始想到了排序,但感觉没办法做,就放弃了,又用了贪心算法,但是还没做对,于是就想到用Java暴力解法,但是没做完感觉会超时,就直接看答案了:
答案是排序加双指针,而且还有优化:
具体题目:
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum-closest
//贪心算法啦
class Solution {
public int threeSumClosest(int[] nums, int target) {
//排序
Arrays.sort(nums);
//用大值定义了一个变量
int best=100000;
//开始遍历:先定住i,从零开始
for(int i=0;i0&&nums[i]==nums[i-1]) continue;
int j=i+1,k=nums.length-1;
//确定i后,剩余两个可以是i后面的任意两个数的组成,因为排完序了,所以后面当sum大于target就后指针前移,sum就会变小啊。
while(jtarget){
int k0=k;
while(k0>j&&nums[k0]==nums[k]){
k0--;
}
k=k0;
}
else {
int j0=j;
while(j0
最后一节课跟同学打麻将,到寝室的路上买了点水果,到寝室就开始振了,一直打到十一点半,女朋友的电话也没接,完蛋了!!



