左耳听风ARTS第一周

ZP-深圳-JAVA 4号小组
Algorithm
英文

1009. Complement of Base 10 Integer
Example 1:

输入:5
输出:2
解释:5 的二进制表示为 "101",其二进制反码为 "010",也就是十进制中的 2 。
示例 2:

输入:7
输出:0
解释:7 的二进制表示为 "111",其二进制反码为 "000",也就是十进制中的 0 。
示例 3:

输入:10
输出:5
解释:10 的二进制表示为 "1010",其二进制反码为 "0101",也就是十进制中的 5 。
 

提示:

0 <= N < 10^9

解题思路:最开始我也没相处好的办法,看评论发现大家的思路是在提示0 <= N < 10^9上面,几位老哥的思路启发了我(其实相当于偷看答案了)。想到原码与反码的关系是N 和 M的关系:

M = 2 ^ log N -1

于是第一个解答是


class Solution {
   int bitwiseComplement(int N) {
    int mask = 2;
    while(mask <= N)
        mask <<= 1;
    return N ^ mask - 1;
	}
}

这个while() XXX;我也是第一次用,可能这就是函数式编程的一个思想吧(自己之前写的太low了,看了一个大哥用python这样写可以,自己试一下也行。)。
修正版,一句代码搞定(三元表达式)

class Solution {
   int bitwiseComplement(int N) {
    return (N>0) ? N ^ (2 << (int)(log10(N)/log10(2)))-1 :1;
    }
}

Review
这是一个关于API是什么的文章?标题直译过来就是“用简单的语言说明什么是API”(来自medium,这个作者慢耐心乐于分享的,你看他回复第一个人提问的RestFul API,点开回复简直是另一篇文章。)

https://medium.freecodecamp.org/what-is-an-api-in-english-please-b880a3214a82
文章还不错,主要的收获如下(其实文章知识点很多,且解释的不错,比如作者的关于RestFul API的回复就很不错。)

(1)首先通过说明API不是server,但绝对是server获得请求与接受响应的一部分。
原文:An API is not same as the same remote server,rather it is the part of the server that receive requests and sends responses.

拿访问faceBook作为例子,你访问facebook主机,拿什么访问?用网络请求,网络访问其实还是一个API,一个关于facebook请求的,API是服务器的一部分

(2)API要看成一个服务,既然是服务,从你的用户角度来看就是,这个东西可以离开你的网站照样好用(参考一下,你登录某些网站,可以用微信,微博账号来登录,怎么完成的,就是有一个登录API你通过这个API就可以。)

From your user perspective -----》(就当学英语了,就…的角度而言)

(3)API中的这个A,就是applicetion的意思,什么是applicetion,作者举的两个例子很说明问题:

A piece of software with a distinct function。
The whole server the whole app or just a small part of an app.
以上两者都是applicetion(上学的时候,有个不是相关专业的老师问过这个applicetion容器到底是个什么,现在可以有个好答案,软件的函数或者一整个服务器,一个app 或者 app的一部分都可以是application,放你想实现的一些东西。)

(4)RestFul API
其实就是一个符合Rest原则的API接口

Tips:
关于回调的一个了解,首先我们ajax请求是异步的,他给我带来很多的方便,如果都是串行的请求一个接一个,客户体验就不要提有多糟糕了。异步请求同样也带来不少问题,我们有的时候会基于别的请求结果来处理结果,或者直接依赖别的请求结果去发送另一个请求。

这时候被依赖的那个请求姗姗来迟,或者压根就没返回,后续结果肯定有问题。解决这种JS目前有两种,一种是嵌套,一种是promise(貌似是ES6带来新的东西)

这个我有整理去写相关的博客。

Sharing
分享就是关于复杂度。
其实这部分上学的时候就学过,这次看到相关文章重新温习一遍。

复杂度是什么?其实你可以把他看成一个指标,随着操作数量级提高的对应的空间以及时间的消耗。

复杂度都包括什么?时间复杂度和空间复杂度,一般来说讨论时间复杂度比较多也相对复杂,因为时间的响应带来的体验最直接,而且有很多算法可以优化。

时间复杂度高就一定效率低吗?不一定,宿主的环境,以及你操作的数量级的数据都有影响,同样大的数据量你用i3和 i9 ,结果一定不一样。你的数据就几条,你用什么吊炸天的算法都不一定能快多少。但是这是一个指标,你可以预估你的程序。

怎么估计的?
首先我们可以很清楚的感知到,代码执行时间T(n)和代码执行的次数成正比(不符可以debug一下,前端后台都可以,尤其是for玄幻这种)。

当然了预估行数,也不行。这时候大O表示法登场了,加法法则(就是总复杂度按照复杂度量级最大的那个算)和乘法法则(嵌套代码复杂度等于嵌套内外复杂度的乘积。)

常见的复杂度
在这里插入图片描述
上学的时候考试都会考这些复杂度谁大谁小排个序,当时主要就是对这个log n 和 n log n会有点懵逼,借用别人的一个图。(其实很简单的一个数学方面的东西 log n < N < n log n ,你一个logn乘以n怎么会大于n呢,自己写几个数字带进去就好了,比如我就会用100来带入进去
n =100 y = 100
n = log 100 y=10
n = 100log100 y=1000
实操胜于空谈。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值