目录 一、不用加号的加法(1)原题再现(2)问题分析(3)完整代码 二、走方格的方案数(1)原题再现(2)问题分析(3)完整代码 一、不用加号的加法(1)原题再现面试题17.01.不用加号的加法 设计一个函数把两个数字相加。不得使用+或者其他算术运算符。示例:输入:a=1,b=1输出:2(2)问题分析 这道题要求不能用“+”等算数运算符,所以我们可以想到使用位运算符。符号描述运算规则&与两个位都为1时,结果才为1。|或两个位都为0时,结果才为0。^异或两个位相同为0,相异为1。~取反0变1,1变0。左移各二进位全部左移若干位,高位丢弃,低位补0>>右移各二进位全部右移若干位
目录 一、不用加号的加法(1)原题再现(2)问题分析(3)完整代码 二、走方格的方案数(1)原题再现(2)问题分析(3)完整代码 一、不用加号的加法(1)原题再现面试题17.01.不用加号的加法 设计一个函数把两个数字相加。不得使用+或者其他算术运算符。示例:输入:a=1,b=1输出:2(2)问题分析 这道题要求不能用“+”等算数运算符,所以我们可以想到使用位运算符。符号描述运算规则&与两个位都为1时,结果才为1。|或两个位都为0时,结果才为0。^异或两个位相同为0,相异为1。~取反0变1,1变0。左移各二进位全部左移若干位,高位丢弃,低位补0>>右移各二进位全部右移若干位
合并两个有序列表一.需求:二.示例测试三.实现流程图四.代码实现五.代码思路六.测试结果一.需求:给你两个按非递减顺序排列的整数列表nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为m+n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n二.示例测试示例1:输入:nums1=[1,2,3,0,0,0],m=3,nums2=[2,5,6],n=3输出:[1,
合并两个有序列表一.需求:二.示例测试三.实现流程图四.代码实现五.代码思路六.测试结果一.需求:给你两个按非递减顺序排列的整数列表nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为m+n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n二.示例测试示例1:输入:nums1=[1,2,3,0,0,0],m=3,nums2=[2,5,6],n=3输出:[1,
目录1.面试题17.14. 最小K个数解题思路2.前K个高频元素解题思路3.前K个高频单词解题思路TOP-K问题:即求数据集合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。比比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。对于Top-K问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了(可能数据都不能一下子全部加载到内存中)。最佳的方式就是用堆来解决,基本思路如下:1.用数据集合中前K个元素来建堆 前k个最大的元素,则建小堆前k个最小的元素,则建大堆2.用剩余的N-K个元素依次与堆顶元素来比较,不满足则替换堆顶元素将剩余N-K个
目录1.面试题17.14. 最小K个数解题思路2.前K个高频元素解题思路3.前K个高频单词解题思路TOP-K问题:即求数据集合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。比比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。对于Top-K问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了(可能数据都不能一下子全部加载到内存中)。最佳的方式就是用堆来解决,基本思路如下:1.用数据集合中前K个元素来建堆 前k个最大的元素,则建小堆前k个最小的元素,则建大堆2.用剩余的N-K个元素依次与堆顶元素来比较,不满足则替换堆顶元素将剩余N-K个
LeetcodeLeetcode-面试题17.04.消失的数字Leetcode-189.轮转数组Leetcode-面试题17.04.消失的数字异或法时间复杂度为O(N)我们的思路是将所有的数异或在一起,然后再将结果异或0-N,得到的最后结果就是消失的数字;原理:a^a=0;0^a=a. intmissingNumber(int*nums,intnumsSize) { intret=0,i=0; //先将数组中的数异或在一起 for(i=0;i0-N等差数列求和再减去数组中的值时间复杂度为:O(N)这个思路是,先将0-N个数字的和通过等差数列求和公式相加在一起,再遍历一次数组依次减
LeetcodeLeetcode-面试题17.04.消失的数字Leetcode-189.轮转数组Leetcode-面试题17.04.消失的数字异或法时间复杂度为O(N)我们的思路是将所有的数异或在一起,然后再将结果异或0-N,得到的最后结果就是消失的数字;原理:a^a=0;0^a=a. intmissingNumber(int*nums,intnumsSize) { intret=0,i=0; //先将数组中的数异或在一起 for(i=0;i0-N等差数列求和再减去数组中的值时间复杂度为:O(N)这个思路是,先将0-N个数字的和通过等差数列求和公式相加在一起,再遍历一次数组依次减
Java常用类1.包装类1.1什么是包装类?Java是面向对象的语言,但不是“纯面向对象”的,比如我们经常用到的基本数据类型就不是对象。在我们实际应用中,经常需要将基本数据转换成对象,以便于操作。为了解决这个不足,Java在设计类时,为每个基本数据类型分别设计了一个对应的类进行代表,这样的八个与基本数据类型对应的类统称为包装类(WrapperClass)。8种基本数据类型,分别对应一个包装类。包装类均位于java.lang包:基本数据类型包装类byteBytebooleanBooleanshortShortcharCharacterintIntegerlongLongfloatFloatdou
Java常用类1.包装类1.1什么是包装类?Java是面向对象的语言,但不是“纯面向对象”的,比如我们经常用到的基本数据类型就不是对象。在我们实际应用中,经常需要将基本数据转换成对象,以便于操作。为了解决这个不足,Java在设计类时,为每个基本数据类型分别设计了一个对应的类进行代表,这样的八个与基本数据类型对应的类统称为包装类(WrapperClass)。8种基本数据类型,分别对应一个包装类。包装类均位于java.lang包:基本数据类型包装类byteBytebooleanBooleanshortShortcharCharacterintIntegerlongLongfloatFloatdou