一转眼,今天是我接触编程的第128天了,是一个很有纪念意义的日子,那么这篇文章我将为大家分享我与阿里云之间的故事。
@[toc]
机缘
我第一次接触阿里云是因为:那天我在自学c语言的时候我遇到了一个自己难以理解的问题,于是我就向我的一个同为计算机专业的表姐寻求帮助,他帮助我解答了并且给了我一个建议:以后你再遇到计算机方面的难题时你可以去阿里云上面看看,我跟你说的并不一定都是对的,你在阿里云上面看更加权威,那里面有很多的大佬会分享相关方面的知识,并且你也可以把你学习到的知识也分享到上面,巩固自己的知识,同时也能帮助到别人,也是从那天开始我每次遇到计算机上面的问题我就会去阿里云上面寻找答案,并且在2022.12.2日那天我写下了自己的第一篇博客,虽然看的人不是很多,但是我也因此喜欢上了在阿里云上面分享自己学到的知识。
在阿里云上我会分享自己学习到的知识,当我实现了某个项目的时候,我也会将这个项目分享在阿里云上,不仅如此我也会在阿里云上面记录我的编程语言的学习路程,当我再以后找工作的时候我可以随时看看我写的博客巩固知识。
收获
在创作的过程中,为了使每个看文章的人都能理解,我首先自己得理解这个知识点,我会去查找相关的文献和资料,看看源代码,在这个过程中我能使自己的知识更加的牢固,这点我深有体会。我也从一个遇到点问题就问别人,到现在的能够自己查找相关文献和资料并且还能够为别人解决问题的人了,每当我为别人做解答的时候,心里总会有一种自豪感。
通过在阿里云上的学习我能够看到一个题目的最优解,这也使得我的代码能力不断地提高,我的代码思维也得到了很大的提升,当我自己刷起题目来更加游刃有余。
在阿里云这个大团体中我能结交到很多志同道合的朋友,我们一起努力,互相支持,通过阿里云这个平台我也能认识到许多当前领域的专家,我可以感受到大家的学习热情并且不断地激励我学习。
日常
现如今我平均每个星期会更新至少两篇以上的文章,基本上在每次学习了新知识后我就会在阿里云上面分享我学习到的知识,因为我把写博客当作了自己巩固知识的一种方式,我写博客的目的不是为了阅读量和粉丝,我觉得利用工具来提升自己才是最重要的,每当自己写了一篇博客后。你会发现你弥补了很多知识漏洞,你对这些知识的印象会更加的深刻,你不会轻易的忘记它。不仅如此,会有许多的大佬在你的文章下面评论,纠正你的错误,给你提一些建议,我觉这点是非常好的,因为你自己很难发现自己的错误。
成就
我觉得我写的最好的一段代码是一道leetcode寻找单身狗的题解。
leetcode之只出现了一次的数字
这是题解思路:
在做这个题之前,我们需要知道一个知识,那就是异或(^)位运算。二进制位相同为0,相异为1。0异或任何数结果还是那个数,两个相同的数异或结果为0。也就是说这个题我们只需要将数组的每一个元素全部都异或一遍,得到的最终结果就是那个只出现了一次的数字。
这个题目跟上面其实思路是一样的,只不过在这个数组里面有两个只出现了一次的数字,我们还只是全部将他们异或一下,是不能得到最终结果的。所以这里我们需要稍稍做点改变,因为你数组里面如果只有一个单身狗,那么就是只需要全部异或一遍,那么如果数组里面有两个的时候我们只需要将两个只出现了一次的数字形象的放置在两个不同的数组中,其他两两相同的数字只需要在一个数组中就可以了。那么想要做出来这道题的关键其实就是如何将这两个只出现了一次的数字放在不同的数组中。
同样的我们还是先将这个数组的所有元素异或一下,这个异或的结果其实就是那两个只出现了一次的数字以获得结果。然后我们再来看这个结果的二进制位,因为我们前面说了,异或操作二进制位相同为0,相异为1,我们只需要找到二进制位1的地方,然后再将数组中所有元素相同的地方二进制位0的放一组,为1的放另一组,最后再分别异或就找到了那两个只出现了一次的数字。
这是c语言实现的代码
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* singleNumber(int* nums, int numsSize, int* returnSize){
//动态开辟一个两个元素为0的数组,用来存放两个单身狗
int* ans = (int*)calloc(2,sizeof(int));
int ret = 0;
for(int i =0 ;i<numsSize; i++)
{
ret^=nums[i];
}
//pos用来记录ret中哪个二进制位为1
int pos = 0;
for(int i = 0; i<32; i++)
{
if((ret>>i)&1 == 1)
{
pos = i;
break;
}
}
for(int i = 0; i<numsSize; i++)
{
if((nums[i] >> pos)&1 == 1)
{
ans[0]^=nums[i];
}
else
{
ans[1]^=nums[i];
}
}
*returnSize = 2;
return ans;
}
AI 代码解读
Java实现
class Solution {
public int[] singleNumber(int[] nums) {
int[] ans = new int[]{
0,0};
int ret = 0;
for(int i =0; i<nums.length; i++) {
ret^=nums[i];
}
int pos = 0;
for(int i = 0; i<32; i++) {
if(((ret>>i)&1) == 1) {
pos = i;
break;
}
}
for(int i = 0; i<nums.length; i++) {
if(((nums[i]>>pos)&1) == 1) {
ans[0]^=nums[i];
}else{
ans[1]^=nums[i];
}
}
return ans;
}
}
AI 代码解读
憧憬
现在我正处于大一阶段,未来有无限的希望,我已经拥有了一手好牌,我接下来要做的就是用这首好牌赢得比赛。我会不断努力的学习,提升自己的编程能力,不断积累专业知识,并且不断认识更加优秀的大佬,让我的这些知识和人缘在以后找工作的时候发挥作用,找到一个年薪30w的工作,哈哈哈哈,乾坤未定,你我皆是黑马,我相信我的愿望一定会实现的,大家一起加油。