Java算法总结
·
我要开始定新目标,因为上学期一直在学Java、准备比赛,寒假去学习网安了,没有时间刷算法,开学一周重新拾回算法,打算挑战365天Leetcode上Knight,坚持每天吃透2~3题,我会每周做一次总结。
第一周(3月8号~3月14号):
这周可以说是试错周了,每天的算法类型都是不重样的,但是好多题目都是AI思考,被AI带偏了,现在改变思路,先自己做一遍,把思路写下来,不会再找AI,然后再重新自己写一遍,总结题型、核心思路、易错点。
(例子)
题目:414.第三大的数
- 题型
- 核心思路
- - 用3个变量保存:第一大、第二大、第三大
- - 遍历数组,只更新这3个数
- - 比第一大还大:三、二、一依次往后挪
- - 比第二大、比第一小:三、二往后挪
- - 比第三大、比第二小:更新第三大
- - 有第三大就返回,没有就返回第一大
- 易错点
- - 必须去重,相同数字不算多次
- - 初始值要用极小值,不能用0
- - 最后要判断:数组是否真的有3个不同数
- - 不要用排序,效率低且容易踩坑
- 代码
class Solution {
public int thirdMax(int[] nums) {
long first = Long.MIN_VALUE;
long second = Long.MIN_VALUE;
long third = Long.MIN_VALUE;
for(int num : nums){
if(third == num || second == num || first == num){
continue;
}
if(num > first){
third = second;
second = first;
first = num;
}
else if(num > second && num < first){
third = second;
second = num;
}
else if(num > third && num < second){
third = num;
}
}
if(third == Long.MIN_VALUE){
return (int)first;
}
else{
return (int)third;
}
}
}
第二周(3月15号~3月22号):
这周重新定义了一下做题方法,个人觉得方法挺适合我的,我是不太喜欢跟着视频去学的,因为我是输出形的学习者,不太喜欢输入,除非这道题很难,我才去看视频去详细看他思路。我每天的算法题都是基础题,但是总感觉没有提升自己的水平,马上就要蓝桥杯了,这几周可能刷力扣的时候不会太多,可能每天1题吧,可能这几周都刷蓝桥杯真题了,争取Java组省一、省二吧。因为我也比较喜欢不断踩坑,踩坑才能增加经验,但是也是时间的付出。总之我觉得学计算机总要经历很多失败,才会成功的,即使最终还是失败我也不怪别人,只能怪自己不够努力吧。
这是我这一周所刷的题目,题目不多,因为这周接手师兄项目,忙着改bug

最经典就是这道题目了,让我学到了快速幂
题目:50.Pow(x,n)
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,x(n)( ))。
- 题型:
- 快速幂
- 二分法
- 难度:中等
- 核心思路:
- 把幂次n拆分成二进制形式,例如 x10=x8∗x2(10 的二进制是 1010)
- 每次将幂次折半,底数平方,减少乘法次数,时间复杂度优化到O(log|n|)
- 要处理幂小于0的界限
- 要处理幂等于0的界限
- 要判断幂是否为奇数/偶数
- 如果为奇数,折半相乘后还要再乘一次底数
- 如果为偶数,折半相乘后即可
- 我的状态:
- 直接使用库函数,但是觉得这样学不到东西
- 不能写,先抄一遍代码,单独写了3遍,才开始理解
- 问题:
- 不会创建
fastPow方法 - 没有使用幂次折半
- 不会创建
- 易错点:
- 边界范围
- 新建方法来处理符合条件的情况,来计算折半后继续相乘
- 代码:
class Solution {
public double myPow(double x, int n) {
long exponant = n;
if(exponant < 0){
x = 1 / x;
exponant = -exponant;
}
return fastPow(x,exponant);
}
private double fastPow(double x,long n){
if(n == 0){
return 1.0;
}
double half = fastPow(x,n / 2);
if(n % 2 == 0){
return half * half;
}
else{
return half * half * x;
}
}
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)