操作数

LeetCode 945. 使数组唯一的最小增量

余生长醉 提交于 2020-03-23 01:57:44
我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 945. 使数组唯一的最小增量 题目 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。 返回使 A 中的每个值都是唯一的最少操作次数。 示例 1: 输入:[1,2,2] 输出:1 解释:经过一次 move 操作,数组将变为 [1, 2, 3]。 示例 2: 输入:[3,2,1,2,1,7] 输出:6 解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。 可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。 提示: 0 <= A.length <= 40000 0 <= A[i] < 40000 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/minimum-increment-to-make-array-unique 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-先排序,再从左向右累加每两个临近数需要的+1操作数; Arrays.sort(A)排序; 顺次比较并记录将后一个数变为前一个数+1数所需要的操作数; 例子

C++ Primer 有感(重载操作符)

时间秒杀一切 提交于 2020-03-21 15:25:30
1.用于内置类型的操作符,其含义不能改变。也不能为任何内置类型定义额外的新的操作符。(重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义) 2.重载操作符,操作符的优先级、结合性或操作数数目不能改变。 注意:重载操作符时使用默认实参是非法的 。 3.重载操作符并不保证操作数的求值顺序,不再具备短路求值特性。 4.作为类成员的重载函数,其形参看起来比操作数数目少1。作为成员函数的操作符有一个隐含的this形参,限定为第一个操作数。( 重载一元操作符如果作为成员函数就没有(显式)形参,如果作为非成员函数就有一个形参。类似的,重载二元操作符定义为成员时有一个形参,定义为非成员函数时有两个形参 ) 5.重载逗号、取地址、逻辑与、逻辑或等操作符通常不是好做法。这些操作符具有有用的内置含义,如果我们定义了自己的版本,就不能再使用这些内置含义。 6. 将要用作关联容器键类型的类定义<操作符。关联容器默认使用键类型的<操作符。即使该类型将只存储在顺序容器中,类通常也应该定义相等(==)操作符和小于(<)操作符,理由是许多算法假定这些操作符存在。如果类定义了相等操作符,它也应该定义不等操作符!=。 7.为类设计存在操作符的时候,是将操作符设置为类成员还是普通黑成员函数。下面是一些指导原则

RTTI运行时类型识别

一曲冷凌霜 提交于 2020-03-17 05:40:36
RTTI是Runtime Type Identification的缩写,是“运行时类型识别”的意思。面向对象的编程语言,象C++, Java ,Delphi都提供了对RTTI的支持。 本文将简略介绍 RTTI 的一些背景知识、描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI。本文还将详细描述两个重要的 RTTI 运算符的使用方法,它们是 typeid 和dynamic_cast。 1. typeid的用法 1.1type_info类 typeid 的结果是 const type_info&。所以下面先对type_info类作下介绍: class type_info { public: virtual ~type_info(); size_t hash_code() const _CRTIMP_PURE bool operator==(const type_info& rhs) const; _CRTIMP_PURE bool operator!=(const type_info& rhs) const; _CRTIMP_PURE int before(const type_info& rhs) const; _CRTIMP_PURE const char* name() const; _CRTIMP_PURE const char* raw

Java运算符

我与影子孤独终老i 提交于 2020-03-16 18:34:03
Java运算符 一、运算符分类 运算符优先级 算术运算符 一元 ++,-- 二元 +,-,*,/,% 赋值运算符 = 扩展运算符 +=,-=,*=,/= 关系运算符 >,<,==,!=,>=,<=,instanceof 逻辑运算符 &&,||,!,^ 位运算符 &,|,~,^,>>,<<,>>> 条件运算符 ?: 字符串连接符 + 二、算术运算符 (1)一元运算符 a++:先使用变量a后再自增。 ++a:变量a先自增后再使用。 (2)二元运算符 1. 整数运算 操作数只要有Long类型,结果为Long类型,否则结果为int类型。 2. 浮点运算 操作数只要有double类型,结果为double类型,否则为float类型。 3. 取模运算 操作数可为浮点型,但一般为整型。 余数的符号与第一操作数相同。 三、赋值运算符 四、关系运算符 这里少见的就是instanceof运算符:A instanceof B,这是判断对象A是否属于类B,返回值为boolean类型。 五、逻辑运算符 需要注意的是:逻辑运算符的两个操作数必须为boolean类型。 逻辑与 & 两个操作数都为true才返回true;否则为false 逻辑或 | 两个操作数都为false才返回false;否则为true 逻辑非 ! 取反:!true==false, !false==true 逻辑异或 ^ 两个操作数不同为true

深入理解计算机系统之程序的机器级表示部分学习笔记

那年仲夏 提交于 2020-03-16 08:08:11
不论我们是在用C语言还是用JAVA或是其他的语言编程时,我们会被屏蔽了程序的机器级的实现。机器语言不需要被编译,可以直接被CPU执行,其执行速度十分 快。但是机器语言的读写性与移植性较高级语言低。高级语言被编译后便成为了汇编语言,汇编语言 十分接近 机器语言。之后汇编代码会转化为机器语言。虽然现代 的编译器能帮助我们将高级语言转化为汇编语言,解决了不少问题,但是对于一个严谨的程序员来说,需要做到能够阅读和理解汇编语言。我们主要围绕Intel来讲 解。 一 Intel处理器的历史演变 Intel处理器最的早是8086, 它是 十六 位的微处理器,作为第一代单芯片,8086知名度是相当的高。之后又有80286、i386、i486、Pentium、PentiumPro、 Pentium/MMX、PentiumⅡ、PentiumIII等等的一系列处理器出现了。每个时间上相继的处理器都是向后兼容的。Intel称其指令集为IA32,也就是Intel32位体系结 构,也就是我们平常所说的x86。 二 程序编码 我们写一个C程序,用Unix命令行编译p1.c和p2.c两个文件。即为 unix> gcc -02 -o p p1.c p2.c 其 中 -02 告诉编译器使用第二级优化。而二级优化则是在性能优化与使用方便之间一个最好的权衡。所以代码经常使用二级优化。 (1)机器级代码

Java 位运算符

 ̄綄美尐妖づ 提交于 2020-03-16 03:19:15
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。 位运算符作用在所有的位上,并且按位运算。假设a = 60,和b = 13;它们的二进制格式表示将如下: A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A | B = 0011 1101 A ^ B = 0011 0001 ~A= 1100 0011 下表列出了位运算符的基本运算,假设整数变量A的值为60和变量B的值为13: 操作符 描述 例子 & 按位与操作符,当且仅当两个操作数的某一位都非0时候结果的该位才为1。 (A&B),得到12,即0000 1100 | 按位或操作符,只要两个操作数的某一位有一个非0时候结果的该位就为1。 (A | B)得到61,即 0011 1101 ^ 按位异或操作符,两个操作数的某一位不相同时候结果的该位就为1。 (A ^ B)得到49,即 0011 0001 〜 按位补运算符翻转操作数的每一位。 (〜A)得到-61,即1100 0011 << 按位左移运算符。左操作数按位左移右操作数指定的位数。 A << 2得到240,即 1111 0000 >> 按位右移运算符。左操作数按位右移右操作数指定的位数。 A >> 2得到15即

C语言数据类型转换

房东的猫 提交于 2020-03-15 18:04:11
目录 一、自动类型转换 1、操作数中没有浮点型数据时 2、操作数中有浮点型数据时 3、赋值运算符两侧的类型不一致时 4、右值超出左值类型范围时 二、强制类型转换 三、课后作业 四、版权声明 计算机进行算术运算时,要求各操作数的类型具有相同的大小(存储位数)及存储方式,不能将char 型( 1 字节)数据与 int 型(2、4或8字节)数据直接参与运算;由于存储方式的不同,也不能将 int 型数据与 double 型数据直接参与运算。 然而,由于 C语言的灵活性,在一个表达式或一条语句中,允许不同类型的数据混合运算。 C语言的灵活性与计算机的机械性是一对矛盾,如处理不好,将会产生错误结果。对于某些类型的转换编译器可隐式地自动进行,不需程序员干预,称这种转换为 自动类型转换 ;而有些类型转换需要程序员显式指定,这种类型转换称为 强制类型转换 。 一、自动类型转换 一个表达式中出现不同类型间的混合运算,较低类型将自动向较高类型转换。 不同数据类型之间的差别在于数据的取值范围和精度上,一般情况下,数据的取值范围越大、精度越高,其类型也越“高级”。 整型类型级别从低到高依次为: signed char->unsigned char->short->unsigned short->int->unsigned int->long->unsigned long 浮点型级别从低到高依次为:

Python实现扑克24点小游戏 ,从此我就没输过

我与影子孤独终老i 提交于 2020-03-14 11:22:26
24点游戏玩法为:从一副扑克中抽取4张牌,对4张牌使用加减乘除中的任何方法,使计算结果为24。 我们用Python来完成24点游戏的程序设计!!从此站在赌神巅峰 我在拉斯维加斯等你 PS注意:很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。为此小编建了个Python全栈免费答疑.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新Python实战教程免非下,,一起相互监督共同进步! 一、设计思路: 由于设计到了表达式,很自然的想到了是否可以使用表达式树来设计程序。本程序的确使用了表达式树,也是程序最关键的环节。简要概括为:先列出所有表达式的可能性,然后运用表达式树计算表达式的值。程序中大量的运用了递归,各个递归式不是很复杂,大家耐心看看,应该是能看懂的 表达式树: 表达式树的所有叶子节点均为操作数(operand),其他节点为运算符(operator)。由于本例中都是二元运算,所以表达式树是二叉树。下图就是一个表达式树 具体步骤: 1、遍历所有表达式的可能情况 遍历分为两部分,一部分遍历出操作数的所有可能,然后是运算符的所有可能。全排列的计算采用了递归的思想 2、根据传入的表达式的值,构造表达式树 由于表达式树的特点,所有操作数均为叶子节点,操作符为非叶子节点,而一个表达式(例如( ( ( 6 + 4 ) - 2 ) * 3

js中相等与不等

蓝咒 提交于 2020-03-14 10:24:38
1.相等 1.一致/严格相等 (===) 全等操作符比较两个值是否相等,两个被比较的值在比较前都不进行隐式转换。如果两个被比较的值具有不同的类型,这两个值是不全等的。否则,如果两个被比较的值类型相同,值也相同,并且都不是 number 类型时,两个值全等。最后,如果两个值都是 number 类型,当两个都不是 NaN,并且数值相同,或是两个值分别为 +0 和 -0 时,两个值被认为是全等的。 当两个操作数都是对象时,JavaScript会比较其内部引用,当且仅当他们的引用指向内存中的相同对象(区域)时才相等,即他们在栈内存中的引用地址相同。 2.相等(==) 相等操作符比较两个值是否相等,在比较前将两个被比较的值转换为相同类型。在转换后(等式的一边或两边都可能被转换),最终的比较方式等同于全等操作符 === 的比较方式。 相等操作符满足交换律。 相等操作符对于不同类型的值,进行的比较如下图所示: 注意字符串类型与布尔型变量比较时,会同时转换为number类型进行比较 2.不等 1.不相等 (!=) 不等操作符仅当操作数不相等时返回true,如果两操作数不是同一类型,JavaScript会尝试将其转为一个合适的类型,然后进行比较。如果两操作数为对象类型,JavaScript会比较其内部引用地址,仅当他们在内存中引用不同对象时不相等。 2.不一致/严格不相等 (!==)

结构型模式--组合模式

こ雲淡風輕ζ 提交于 2020-03-13 09:35:16
组合模式 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似得对象当作一个单一得对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。它创建了对象组的树形结构。 介绍 意图: 将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 主要解决: 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 如何解决: 树枝和叶子实现统一接口,树枝内部组合该接口。 关键代码: 树枝内部组合该接口,并且含有内部属性 List,里面放 Component。 应用实例: 1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。 2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。 优点: 1、高层模块调用简单。 2、节点自由增加。 缺点: 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。 使用场景: 部分、整体场景