题目链接:leetcode-29-两数相除此题需要在不使用乘法,除法,取模的情况下求的两数相除的结果,开始看到这道题,以为使用位运算做的,结果发现位运算里面太多的循环,导致并不能通过测试.首先要知道除法的定义,除法的定义其实非常简单,比如:10/3=x=>3x=10=>x+x+x=10所以我们只需要循环执行+除数操作,直到和大于或者小于被除数时,就可以得到当前的商。当然使用减法也是可以的。这就是暴力求解的做法但是单纯的循环执行+除数操作非常耗时,所以需要对步长进行调整,每一次相加如果小于被除数,那么就将步长加一,如果大于被除数了就调整步长为0再次重复上述操作,直到相加结果大于被除数,并且步长为
一、题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。输入:nums=[2,7,11,15],target=9输出:[0,1]解释:因为nums[0]+nums[1]==9,返回[0,1]。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/two-sum二、解法:classSolution{public:vectortwoSum(vector&nums,intt
题目链接:leetcode-29-两数相除此题需要在不使用乘法,除法,取模的情况下求的两数相除的结果,开始看到这道题,以为使用位运算做的,结果发现位运算里面太多的循环,导致并不能通过测试.首先要知道除法的定义,除法的定义其实非常简单,比如:10/3=x=>3x=10=>x+x+x=10所以我们只需要循环执行+除数操作,直到和大于或者小于被除数时,就可以得到当前的商。当然使用减法也是可以的。这就是暴力求解的做法但是单纯的循环执行+除数操作非常耗时,所以需要对步长进行调整,每一次相加如果小于被除数,那么就将步长加一,如果大于被除数了就调整步长为0再次重复上述操作,直到相加结果大于被除数,并且步长为
一、有效的字母异位词242.有效的字母异位词1.方法概述因为本题中字符串只包含小写字母,就可以定义一个数组来记录字符串中字符出现的次数。遍历第一个字符串,用charAt拿到对应的小写字母然后减去'a'对应的ASCII值,得到一个相对数下标即可,然后对应下标的数组值++。同理另一个字符串采用--。最后遍历数组中是否存在不为0的元素,存在则说明两字符串中的字母出现的频率一定是不相同的。2.具体实现Java实现点击查看代码classSolution{publicbooleanisAnagram(Strings,Stringt){int[]arr=newint[26];for(inti=0;i3.要点
一、有效的字母异位词242.有效的字母异位词1.方法概述因为本题中字符串只包含小写字母,就可以定义一个数组来记录字符串中字符出现的次数。遍历第一个字符串,用charAt拿到对应的小写字母然后减去'a'对应的ASCII值,得到一个相对数下标即可,然后对应下标的数组值++。同理另一个字符串采用--。最后遍历数组中是否存在不为0的元素,存在则说明两字符串中的字母出现的频率一定是不相同的。2.具体实现Java实现点击查看代码classSolution{publicbooleanisAnagram(Strings,Stringt){int[]arr=newint[26];for(inti=0;i3.要点
2.两数相加分析题目比较简单,就是两个数相加求和。按照加法思想,同时遍历两个链表,从个位一直加到最高位即可。比如要计算352+99,步骤如下:最低位2+9得11,需进位,个位保留1,进位1先存储5+9得14,再加上刚刚的进位1,得到15,本位保留5,进位1先存储3+0(注意此时99的位数已经用完了,但是352还有一位,所以这里可以将99的这一位看作0)得3,再加上刚刚的进位1,得到4将前面几步中的数字按照顺序排列,可得到451。观察上述过程,一个容易出错的地方,在于加法进位的处理。另外一个难点,在于位数的处理,两个链表长度不一,结果链表的长度也只有把前面所有位数加完才确定。一种实现functi
1.两数之和方案一,暴力双循环读完题目,马上能想到的方案就是双循环,挨个排查,写出来也很快:vartwoSum=function(nums,target){constlen=nums.length;for(leti=0;i上面方案,最大的问题就是时间复杂度为O(n^2),所以我们可以想办法在此基础上优化。方案二,空间换时间(Map)方案一的思路是,从头到尾挨个去计算数组中任意两个元素的和,然后与给定结果值进行比较,从而找到目标索引,这就导致必须得进行O(n^2)复杂度的双循环,效率低下。为了干掉双循环,我们不得不转换思考方式,如何才能在一次迭代中就实现题目要求呢。题目本质是找到符合要求的两个数
2.两数相加分析题目比较简单,就是两个数相加求和。按照加法思想,同时遍历两个链表,从个位一直加到最高位即可。比如要计算352+99,步骤如下:最低位2+9得11,需进位,个位保留1,进位1先存储5+9得14,再加上刚刚的进位1,得到15,本位保留5,进位1先存储3+0(注意此时99的位数已经用完了,但是352还有一位,所以这里可以将99的这一位看作0)得3,再加上刚刚的进位1,得到4将前面几步中的数字按照顺序排列,可得到451。观察上述过程,一个容易出错的地方,在于加法进位的处理。另外一个难点,在于位数的处理,两个链表长度不一,结果链表的长度也只有把前面所有位数加完才确定。一种实现functi
1.两数之和方案一,暴力双循环读完题目,马上能想到的方案就是双循环,挨个排查,写出来也很快:vartwoSum=function(nums,target){constlen=nums.length;for(leti=0;i上面方案,最大的问题就是时间复杂度为O(n^2),所以我们可以想办法在此基础上优化。方案二,空间换时间(Map)方案一的思路是,从头到尾挨个去计算数组中任意两个元素的和,然后与给定结果值进行比较,从而找到目标索引,这就导致必须得进行O(n^2)复杂度的双循环,效率低下。为了干掉双循环,我们不得不转换思考方式,如何才能在一次迭代中就实现题目要求呢。题目本质是找到符合要求的两个数