![](https://img-blog.csdnimg.cn/98f680b7847d49daa5ce3bdf92c80faa.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指offer
leetcode上的剑指offer刷题记录,看了题解还不会写的就没有记录
吴天德少侠
这个作者很懒,什么都没留下…
展开
-
剑指 Offer II 006. 排序数组中两个数字之和
由于这个number数组是有序的,所以可以直接使用左右指针解法,很简答的,看看代码就懂了。class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { int left = 0, right = numbers.size() - 1; vector<int> ans; while (left < right) { // 同一原创 2021-12-16 14:56:44 · 79 阅读 · 0 评论 -
剑指 Offer II 004. 只出现一次的数字
为了只遍历一遍,我开了2个vector:ans和not_them。ans保存的是所有不同的元素,not_them保存的是那些有3个数量的元素。首先,第一遍将元素push_back到ans中,如果ans中已经有某个将要push_back的元素,那就不push_back(相当于去重),同时把这个元素push_back到not_them中。这一遍下来,所有ans和not_them中的元素都没有重复的,同时ans中一定比not_them多一个元素,这个元素就是我们要返回的。于是,接下来我们就在not_the原创 2021-12-16 13:36:18 · 409 阅读 · 0 评论 -
剑指 Offer II 002. 二进制加法
思路:首先求出最短长度,让他们对应加,将结果push_back到一个vector数组中。如果他们长度相等,判断最后的进位是不是为1,如果为1则push_back进去,否则不push_back。 如果长度不想等,将较长的那个字符串剩下的部分和进位相加,同样将结果push_back进去。最后同样也要判断进位是否为1需要push_back进去。其实就是模拟真实的手写计算过程。就是进位的设置需要注意一下。code:solotion.h#include<string>#i.原创 2021-12-16 09:25:09 · 97 阅读 · 0 评论 -
剑指 Offer II 003. 前 n 个数字二进制中 1 的个数
这道题,其实就是需要实现一个二进制加法:add1 + add2 = result,然后计算result中的1的值。只不过每一次加法的 add2 都等于二进制1。同时将result的结果更新为 add1。add1的初始值为0,n为几就计算几次。画个图大家应该就能明白:因此,最关键的一步是实现二进制加法,然后返回加法的结果,统计结果中1的个数,push_back到结果数组中即可。而二进制加法已经在第二道题中实现了,因此就比较简单了。cpp:#include<iostream>#.原创 2021-12-16 10:43:55 · 212 阅读 · 0 评论 -
剑指 Offer II 005. 单词长度的最大乘积
这道题我是暴力算的,数据量也不大。二重循环遍历,固定i,看i后面的所有字符串:对于一个字符串,看它是否有一个字符已经在i字符串中出现了。如果出现就看下一个,否则计算长度乘积并更新最大长度。class Solution {public: int maxProduct(vector<string>& words) { int maxCmpstrLen = 0; for (int i = 0; i < (words.size...原创 2021-12-16 13:22:57 · 55 阅读 · 0 评论