二进制代码

Leetcode136 . 只出现一次的数字 (C语言)

非 Y 不嫁゛ 提交于 2019-11-29 06:08:50
给定一个 非空 整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 算法思想: 利用异或运算符(^)它的作用是两个数的二进制中的每一个 比特位 ,形同为0,不同则为1. ^是异或, 位运算 的一种,相同为0不同为1 a=3, 二进制 表示是00000011 b=4, 二进制 表示是00000100 a=a^b,a的值为:00000111 b=b^a,b的值为:00000011,即是a的初值3 a=a^b,a的值为:00000100,即是b的初值4 代码如下: int singleNumber(int* nums, int numsSize) { int result = nums[0]; for (int i = 1; i < numsSize; i++) { result ^= nums[i]; } return result; } 来源: CSDN 作者: 啊啊啊狗哥 链接: https://blog.csdn.net/GouGe_CSDN/article/details/87948509

习题 6:字符串和文本

大城市里の小女人 提交于 2019-11-29 04:44:02
虽然你已经在程序中写过字符串了,但你还不了解它。 字符串通常是指你想要展示给别人的或者想要从程序里“导出”的一小段字符。Python可以通过文本里的双引号(")或者单引号(')识别出字符串来。 字符串可以包含之前已经见过的格式化字符。变量是你用“名字 = 值”这样的代码设置出来的。 Python还有一种使用 .format( ) 语法的格式化方式,你会在ex6.py发现它。 ex6.py # 人的类型 types_of_people = 10 # 有几种类型的人 x = f"There are {types_of_people} types of people." # 二进制 binary = "binary" # 不 do_not = "don't" # 知道二进制的人和不知道二进制的人 y = f"Those who know {binary} and those who (do_not)." print(x) print(y) # 我说:有10种类型的人。 print(f"I said: {x}") # 我还说:知道二进制的人和不知道二进制的人 print(f"I also said: '{y}'") # 搞笑 = 假的 hilarious = False # 笑话评价:那笑话好笑吗?! joke_evaluation = "Isn't that joke so funny?

[HNOI2006]鬼谷子的钱袋

落花浮王杯 提交于 2019-11-29 00:46:07
用二进制表示是最少的 把m变成二进制,那么用m的二进制的位数那么多钱袋就可以了 比如m=11010 那么多个钱袋放1,10,100,1000,10000,最多可以达到11111 所以这道题就是求m的二进制位数 实际上本题就是“多重背包的二进制优化”,用二进制拆分就行,然而题中说两数除了1之外都不能相同,比如9,拆分后就是1 2 4 2, 不符合,对拆分序列进行排序,在拆分的时候遇到a[i] == a[i + 1] 的情况,就a[i]--, a[i + 1]++就行,最终得到拆分的方案。 AC代码如下: #include<bits/stdc++.h> using namespace std; const int maxn = 105; int m, cnt, a[maxn]; int main() { cin>>m; int x = 1; while(m - x > 0) // 二进制拆分 { m -= x; a[++cnt] = x; x <<= 1; } if(m!=0) a[++cnt] = m; //多余部分处理 cout<<cnt<<endl; sort(a + 1, a + cnt + 1); for(int i = 1; i <= cnt; ++i) { if(a[i] == a[i + 1] && a[i] != 1) a[i]--, a[i + 1]++; cout

字节(byte)、二进制、字节流、字符流相关概念分析

耗尽温柔 提交于 2019-11-28 19:13:37
https://blog.csdn.net/changwilling/article/details/52065955 1.字节: 字(Byte)节是长度单位。位(bit)也是长度单位。 因为计算机通信和存储的时候都是以010101这样的二进制数据为基础的,这儿的一个0和1占的地方就叫bit(位),即一个二进制位。 1Byte=8bit 1KB=1024B 1MB=1024KB(2的十次方) 2.二进制 二进制数有两个特点:它由两个基本字符0,1组成,二进制数运算规律是逢二进一。 为区别于其它进制数,二进制数的书写通常在数的右下方注上基数2,或加后面加B表示。 例如:二进制数10110011可以写成(10110011)2,或写成10110011B,对于十进制数可以不加注.计算机中的数据均采用二进制数表示,这是因为二进制数具有以下特点: 1) 二进制数中只有两个字符0和1,表示具有两个不同稳定状态的元器件。例如,电路中有,无电流,有电流用1表示,无电流用0表示。类似的还比如电路中电压的高,低, 晶体管的导通和截止等。 2) 二进制数运算简单,大大简化了计算中运算部件的结构。 二进制数的加法和乘法运算如下: 0+0=0 0+1=1+0=1 1+1=10 0×0=0 0×1=1×0=0 1×1=1 由于二进制数在使用中位数太长,不容易记忆,所以又提出了十六进制数. 3.字节流和字符流

最直白、最易懂的话带你认识和学会---数据分析基础包之numpy的使用

好久不见. 提交于 2019-11-28 17:43:41
一、python中的Ellipsis对象   提起Ellipsis对象,很多刚入门或者入门不久的同学肯定会两眼发蒙,还有这个东西?平时心细的同学或许在源码中看到过,但不一定知道他的python学名。    Ellipsis对象: 在python代码中通常写作 … ,没错,就是三个点,他的中文解释为:省略,该对象的bool值为 True。   很多人肯定特别关心的一个问题,那它有什么用途呢   用途一:省略代码,作用类似于pass的一种替代方案,这是python的’TBD’(未确定内容)。 def fun(): …   用途二:循环数据结构, 一个复合对象包含指向自身的引用。 示例: L = [1,2,3] L.append(L) print(L) # 输出为[1,2,3,[…]] 是不是瞬间感觉高大上。   用途三:用来模拟一些情况,使结果看起来更友好,如等差数列,numpy。 高端大气上档次的等差数列生成器,演示结果如下: 简单粗暴地实现: class ProgressionMaker(object): def __getitem__(self, key): if isinstance(key, tuple) and len(key) == 4 and key[2] is Ellipsis: return list(range(key[0], key[-1] + 1, key[1

ASCII,Unicode和UTF-8

时间秒杀一切 提交于 2019-11-28 15:56:40
1.ASCII 我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。 ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。 2.非ASCII编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。 但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é

python 文件操作

蓝咒 提交于 2019-11-28 15:34:34
文件常用IO操作 open 打开 read 读取 write 写入 close 关闭 readline 行读取 readlines 多行读取 seek 文件指针操作 tell 指针位置 打开操作 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 打开一个文件,返回一个文件对象(流对象)和文件描述符。开发文件失败,则返回异常 基本使用:创建一个文件,然后打开它,用完关闭 f = open("data.txt") print(f.read()) f.close() 文件操作中,最常用的操作就是读和写。文件访问的模式有两种:文本模式和二进制模式,不同模式下,操作函数不尽相同,表现的结果也不一样。 open的参数 file 打开或者要创建的文件名,如果不指定路径,默认是当前路径 mode模式 描述字符 意义 r 缺省的,表示只读打开 w 只写打开 x 创建并写入一个新文件 a 写入打开,如果文件存在,则追加 b 二进制模式 t 缺省的,文本模式 + 读写打开一个文件,给原来只读,只写方式打开提供缺失的读或者写能力 # r模式 f = open('test') # 只读还是只写? f.read() f.write('abc')

前端对base64编码的理解,原生js实现字符base64编码

烈酒焚心 提交于 2019-11-28 15:24:31
目录 常见对base64的认知(不完全正确) 多问一个为什么,base64到底是个啥? 按照我们的思路实现一下 到这里基本就实现了,结果跟原生的方法打印的是一样的 下一次 @( 对于前端工程师来说base64图片编码到底是个什么玩意?) **** ---- 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有以下几点* base64是一种图片编码方式,用一长串超长的字符串表示图片 在加载的时候会直接以字符串的形式加载出来,减少了图片加载的http请求 正常加载服务器静态资源的时候都应该是通过http请求回来,每加载一张图片时需要发起一次http请求 ,http请求建立需要一定的时间,所以对于小图而且出现频次比较高的话,这样的成本消耗其实是特别浪费的 所以一般base64编码适用于小图片,出现频次比较高的情况 当然base64编码也有一定的缺点 会增加图片本上的大小,对于小图来说,转码增加的大小和http请求发起的浪费时间相比还是划算的,但是对于大图和出现次数比较少的情况,这种方法就有待商榷 当然上面我现在项目这种问题就很不合适,肯定需要寻求一个好的方式来解决掉这个问题 多问一个为什么,base64到底是个啥? base64是一种编码方式,将二进制编码为64字符串组成的字符码 标准的Base64并不适合直接放在URL里传输

快读 && 快写

好久不见. 提交于 2019-11-28 13:31:31
比较详细的原理介绍↓ 来源:https://www.cnblogs.com/648-233/p/10675983.html 作者: _Alex_Mercer 某些题中,读入数据往往比较繁多,故输入是一大难题,有时会遇到一些读入困难,cin与scanf也许都解决不了,这时掌握快读是必要的。 基本快读思想如下(分析整数): 一位一位读入,对当前读入字符进行分析, 先判断首位是否为负号,并进行相应处理, 如果读入的为数字,将其做处理后存入, 遇到空格视为停止,返回所存值(return)。 一般快读代码如下: #include<bits/stdc++.h> using namespace std; #define mod 10000007 //取模数据,一般大数据题目会做要求 int read(){ //快读多被定义为long long int f=1; //存负 int x=0; char c=getchar(); while(c<'0'||c>='9'){ if(c=='-') f=-1; c=getchar(); //不断读入,直到读入字符在0-9范围内 } while('0'<=c&&c<='9'){ x=x*10+c-'0'; //将原来的数据*=10,借此把新数字当做个位存放 x%=mod; //取模 c=getchar(); //读入下个字符,如果下个字符非数字,则跳出

LeetCode338. 比特位计数

孤街醉人 提交于 2019-11-28 11:54:53
比特位计数 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/counting-bits 思路分析: 方法 1,对于 0~num 中的每个数计算二进制位 1 的个数,可参考 191 题 方法 2,寻找规律,5 的二进制位 个数为 4 的二进制位个数 +1, 2 的 二进制位为 0 的二进制位 +1, 归纳 count[i]=count[i&(i-1)]+1,即,当前数二进制位 1 个数 = 最低位 1 消除后的数的二进制 1 个数 +1 方法 2 ,参考代码 class Solution { public int [ ] countBits ( int num ) { if ( num < 0 ) { // 避免数组越界异常 return null ; } int [ ] count = new int [ num + 1 ] ; count [ 0 ] = 0 ; // 初始化 0 的二进位个数 for ( int i = 1 ; i <= num ; i ++ ) { // 当前数二进制位 1 个数 = 最低位 1 消除后的数的二进制 1 个数