ARTS (第29周)
表象和实际不一样。
最近看的书从基础讲解起了java。
发现了很多和以前理解不一样的东西。
如类的信息的编译和加载,加载的流程。也借此解开了很多以前的困惑。
但也带了更多的困惑。
Algorithm 算法
数组循环队列
循环队列的本质就是将数组当成一个环,头尾相连,
其他地方的实现不难,难的就是只有一个,就是获取头或者尾的指针的下一个位置,主要考虑的情况是指针是数组最后一个位置的情况。
如max是8 ,tail是7那么下一个指针获取的就应该是0,主要为的也是这样的特殊情况。
这里的算法为 -> (tail + 1) % max ;
加一取模 即在0~max-1的环里,获取tail里的下一个数
加一就等于当前数字的下一个数字 ,模max就等于最大数字是max-1
使得算出来的数字是在环里的下一个数字
普通情况就等同于 tail+1 == head
1 |
|
###69. x 的平方根
LeetCode 69
https://leetcode-cn.com/problems/sqrtx/submissions/
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sqrtx
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
第一个解法
将有可能的数都罗列出来,但发现int做计算有进度的问题。然后发现效率不高。
1 | // 执行用时:15 ms,在所有java提交中击败了10.65%的用户 |
第二个解法
在原有的基础上考虑精度的问题后。然后发现效率不高。
1 | // 执行用时:29 ms,在所有java提交中击败了8.23%的用户 |
第三个解法(二分)
但不是找等值的二分 而是找第一个小于等于数的二分
1 | //执行用时:2 ms,在所有java提交中击败了93.59%的用户 |
另外看到的几个比较经典的答案
leetcode里all_is_wel用户的答案
这里利用的是魔数0x5f3759df
1 | class Solution { |
经典的解法-牛顿迭代法
1 | // 牛顿迭代法 |
Review 英文文章
https://spring.io/guides/gs/rest-service/
spring官网的介绍 如何构建一个 RESTful Web Service
Tip 技巧
1、基础数据类型的二进制表示
如整数类型,数字类型,负数用补码来表示的,这么取是因为好计算。
2、类的基础、继承、扩展。
类信息、方法信息等是经过编译的。会在加载的时候将这些信息加载进内存。
3、Random类随机(线性同余法),
jdk里的Random类是一种伪随机算法,但基本能够达到使用的要求。当然特殊场景可以根据需求使用其他的随机方法或者自己定制。
Share 分享
https://blog.csdn.net/weixin_33901641/article/details/91452010 java句柄