当前位置: 首页 > news >正文

网站怎样绑定域名写字就能赚钱做网站

网站怎样绑定域名,写字就能赚钱做网站,怀远县建设局网站,东莞网站设计公司有哪些文章目录 1. 传统交换2. 异或与异或的规律3. 基于异或的排序4. 需要注意的地方5. 经典面试题15.1 题目5.2 思路5.3 实现 6. 经典面试题26.1 题目6.2 思路6.3 实现 1. 传统交换 传统交换方法如下: def swap(i, j):tmp ii jj tmp通过开辟一个额外的变量空间&…

文章目录

  • 1. 传统交换
  • 2. 异或与异或的规律
  • 3. 基于异或的排序
  • 4. 需要注意的地方
  • 5. 经典面试题1
    • 5.1 题目
    • 5.2 思路
    • 5.3 实现
  • 6. 经典面试题2
    • 6.1 题目
    • 6.2 思路
    • 6.3 实现

1. 传统交换

传统交换方法如下:

def swap(i, j):tmp = ii = jj = tmp

通过开辟一个额外的变量空间,承载其中的一个数,以实现变量的交换

2. 异或与异或的规律

异或定义很简单,两数相同则为0,两数相异则为1
异或满足的性质包括结合律和交换律:

  • 性质1:0^a=a(0与任意数结果取决于任意数),a^a=0(任意数与其自身异或结果为0)
  • 性质2:a^b=b^a(交换律),(a^b)^c=a^(b^c)(结合律)
  • 性质3:基于以上两个性质可以推出,多个数进行异或,无论怎样排序,异或的结果不变

3. 基于异或的排序

基于异或排序的方法如下:

def swap2(i, j):i = i ^ jj = i ^ ji = i ^ j

为什么这样的方法能够奏效,可以看下面的例子:假设i=甲,j=乙
经第一句i = i ^ j后,i=甲^乙,j=乙
经第二句j = i ^ j后,i=甲^乙,j=(甲^乙)^乙=甲^(乙^乙)=甲^0=甲(基于性质1和性质2的结合律)
经第三句i = i ^ j后,i=(甲^乙)^甲=(甲^甲)^乙=0^乙=乙(基于性质1和性质2)
从而完成两数交换

4. 需要注意的地方

在写排序时候我们通常需要做交换操作,交换数组中的两个数。如选择排序中我们需要将子数组中最小的数与当前第一位数字交换;又如冒泡排序中我们需要通过两两交换来将最大的数交换到子数组的最高位。
但这时候,当ij指向数组的同一个内存区域时,交换会失败! 也就是说我们想要交换arr[i]arr[j],而此时i==j时交换会失败,因为当指向同一片内存区域时,代码就类似于变成了:

def swap2(i):i = i ^ ii = i ^ ii = i ^ i

自身与自身的相与结果为0,所以这样的操作会将原本数组中的数抹成0,而不是保留原数!
若只是交换i、j的值(ij不指向同一片内存区域)则可以成功,ij的值相等也不会被抹成0。听到的一个说法是,原理是靠内存地址来异或的。

5. 经典面试题1

5.1 题目

int [] arr中,有一种数出现了奇数次,其他数出现了偶数次,请找出这种奇数次的数。

5.2 思路

通过异或解决,因为同样的数与自身相异或结果为0,偶数条件下也为0(异或的性质1);而出现奇数次的数与0相与的结果为数的本身。所以只需要将所有的变量异或上就行了。

5.3 实现

6. 经典面试题2

6.1 题目

int [] arr中,有两种数出现了奇数次,其他数出现了偶数次,请找出这两种出现了奇数次的数

6.2 思路

通过5中的题目可以知道,通过将本题arr中所有数异或,得到的结果应该为a_xor_b = a^b
如何从a_xor_b = a^b中分离出其中的数是值得思考的问题
考虑的方向是,既然a和b是两个不相等的数,那么a^b的结果一定存在1(从二进制上考虑,a^b的二进制中肯定存在1)
那么这个1就可以作为突破的方向,假设我们从a^b中找到第2位上的数为1,则证明a二进制的第2位和b二进制的第2位是不相等的,一个为0,另一个为1(a可能为0/1,b同理)
此时arr中的数可以分为两类,一类是在第2位上为1的,另一类是在第2位上为0的,而a和b肯定是分属两类
通过将所有第2位上为1的数进行异或,或将所有第2位上为0的数进行异或,得到的肯定是a和b的其中一个。因为a和b分别属于这两个类中出现奇数次的数,其他偶数次的在异或过程中已经消为0了。
找到了其中一个数后,通过将a_xor_b = a^b再与找到的数(可能是a也可能是b)进行异或,得到的就是另外一个。

6.3 实现

# 在int [] arr中,有两种数出现了奇数次,其他数出现了偶数次,请找出这两种出现了奇数次的数if __name__ == '__main__':arr = [6, 6, 7, 8, 5, 4, 7, 4, 5, 3]print("原数组为:", arr)a_xor_b = 0for num in arr:a_xor_b = a_xor_b ^ numprint("a^b=", a_xor_b)# a_xor_b=a^b,既然a和b是两个不同的数,a_xor_b中一定存在某一位为1right_one = a_xor_b & (~a_xor_b + 1)  # 提取出最右侧的1,是常见的操作only_one = 0for num in arr:if num & right_one == right_one:only_one = only_one ^ numprint("其中一个数为:", only_one)print("另一个数为:", a_xor_b ^ only_one)
http://www.yayakq.cn/news/943838/

相关文章:

  • 基础微网站开发信息做旅行攻略的网站好
  • 网站设计师证书温州网红打卡地
  • 苏州做网站公司有哪些wordpress上传网页
  • 西安网站开发培训多少钱重庆专业建网站
  • 电影网站模板笔记本页面设计模板
  • wordpress插件进销存郑州seo排名工具
  • 聊城医院网站建设好看云在线网站模板下载 迅雷下载 迅雷下载地址
  • 网站建设都包括什么天眼查登录入口
  • 怎么样在百度搜到自己的网站网站推广公司官网
  • 建设充值网站多钱大庆建设公司网站
  • 公司集团网站开发网站建设推荐
  • 设计网站免费素材企业网络规划设计与实现
  • 欢迎访问中国建设银行网站个人客户重庆在建项目查询
  • 网站建设与维护实训总结seo顾问服
  • 洮南网站建设深圳品牌策划机构
  • 九江商城网站建设邢台做网站哪家便宜
  • 沈阳企业网站开发乐拾seo
  • wordpress 编码免费手机优化大师下载安装
  • 网站建设书模板wordpress网址域名
  • 微网站制作平台哪个好网页小游戏怎么玩
  • 免费网站建设阿里云wordpress超级密码
  • 中小企业建站系统网站地图做计划任务
  • 成都市建设二维码检测网站无锡网站建设方案优化
  • 运城网站开发装修室内设计培训学校
  • 做网站是用wordpress还是DWwordpress 评论回复
  • 廊坊网站建设推广济南网站建设选聚搜网络
  • 网站建设工作基本流程如何在自己的电脑上做网站
  • 纪检网站建设计划书网站建设通俗讲
  • 海安网站开发网站改备案信息
  • 网站流量统计表格做网站端口无法清除