缺失数字

最初的想法是将0到n全部加起来,再减去输入的数字之和,那么差如果非零的话就是我们所需要的数字。但是一想,可能会发生溢出错误,所以换了个思路,先进行排序后,后一个元素与该元素的差是否为1,不为1的话就说明缺了元素。这种方法不会发生溢出错误,代码如下:

  1. class Solution {
  2. public:
  3. int missingNumber(vector<int>& nums) {
  4. sort(nums.begin(),nums.end());
  5. if(nums[0]!=0) return 0;
  6. int l=nums.size();
  7. if(nums[l-1]!=l-1)
  8. {
  9. for(int i=1;i<nums.size();i++)
  10. if((nums[i]-nums[i-1])!=1) return nums[i-1]+1;
  11. }
  12. return l;
  13. }
  14. };

位1的个数

用1进行循环位与比较就可以了,不为0的话就说明有1,累加器加1,代码如下:

  1. class Solution {
  2. public:
  3. int hammingWeight(uint32_t n) {
  4. int count=0;
  5. for(int i=0;i<32;i++)
  6. {
  7. count += (n&00000000000000000000000000000001);
  8. n=n>>1;
  9. }
  10. return count;
  11. }
  12. };

颠倒二进制位

这道题比较简单,涉及到二进制的话就一定是位运算;所以可以new一个新的32位二进制数res,n每次右移、res每次左移,res在移动过程中实现位数的存储,代码如下:

  1. class Solution {
  2. public:
  3. uint32_t reverseBits(uint32_t n) {
  4. uint32_t res=0;
  5. for(int i=0;i<32;i++)
  6. {
  7. if(n&1==1)
  8. res=(res<<1)+1;
  9. else
  10. res=res<<1;
  11. n=n>>1;
  12. }
  13. return res;
  14. }
  15. };

有效的括号

以前学习数据结构的时候一定介绍过利用栈的四则运算,栈的作用当时就是存储括号并优先计算括号内的表达式。这道题很类似,而且简单许多,只用判断括号就行了,直接见代码:

  1. class Solution {
  2. public:
  3. bool isValid(string s) {
  4. stack<char> res;
  5. for(int i=0;i<s.size();i++)
  6. {
  7. if(s[i]=='('||s[i]=='['||s[i]=='{') res.push(s[i]);
  8. else{
  9. if(res.empty()) return false;
  10. if(s[i]==')' && res.top()!='(') return false;
  11. if(s[i]==']' && res.top()!='[') return false;
  12. if(s[i]=='}' && res.top()!='{') return false;
  13. res.pop();
  14. }
  15. }
  16. if(res.empty())
  17. return true;
  18. else
  19. return false;
  20. }
  21. };

汉明距离

这道题我是用x&(1<<i))^(y&(1<<i)进行判断的,即对x与y的二进制每一位进行判断,如果位为1的话x&(1<<i)就为1,再与y&(1<<i)进行异或运算,若相异就将计数器加1,表示该位不一致。

  1. class Solution {
  2. public:
  3. int hammingDistance(int x, int y) {
  4. int count=0;
  5. for(int i=0;i<32;i++)
  6. {
  7. if((x&(1<<i))^(y&(1<<i)))
  8. count++;
  9. }
  10. return count;
  11. }
  12. };

此外还有其他判断方式:

  1. class Solution {
  2. public:
  3. int hammingDistance(int x, int y) {
  4. int res = 0, exc = x ^ y;
  5. while (exc) {
  6. ++res;
  7. exc &= (exc - 1);
  8. }
  9. return res;
  10. }
  11. };

这里是将x与y直接进行异或计算,存入exc中;接下来进入总循环数为1的个数的循环中,再用exc &= (exc - 1)快速的溢出最右边的位1;这个方法比较高效。

帕斯卡三角形

这个自己没有想出来,看来还是对vector这种结构不太熟悉,还需锻炼。先放上代码:

  1. class Solution {
  2. public:
  3. vector<vector<int>> generate(int numRows) {
  4. vector<vector<int> > res;
  5. if(numRows<=0) return res;
  6. res.assign(numRows,vector<int>(1));
  7. for(int i=0;i<numRows;i++)
  8. {
  9. res[i][0]=1;
  10. if(i==0) continue;
  11. for(int j=1;j<i;j++)
  12. {
  13. res[i].push_back(res[i-1][j]+res[i-1][j-1]);
  14. }
  15. res[i].push_back(1);
  16. }
  17. return res;
  18. }
  19. };

大神的代码很清晰,帕斯卡三角形两边都是1,中间是通过上一层的数之和计算出来的。所以两边都是取为1的,中间是通过一个循环存储上一层两数之和的。

LeetCode初级算法(其他篇)的更多相关文章

  1. LeetCode初级算法(树篇)

    目录 二叉树的最大深度 验证二叉搜索树 对称二叉树 二叉树的层次遍历 将有序数组转换为二叉搜索树 二叉树的最大深度 二叉树,所以可以考虑用递归来做.由于根节点已经算过了,所以需要加上1:每次返回都是以 ...

  2. Leetcode初级算法(链表篇)

    删除链表的倒数第N个节点 感觉自己对于链表的知识还是了解的不够深入,所以没有想到用双指针进行操作.我的想法是这样的,首先计算整个链表的长度,然后遍历到长度减去n的节点处,执行删除操作. 自己的代码: ...

  3. Leetcode初级算法(字符串篇)

    目录 反转字符串 颠倒整数 字符串中的第一个唯一字符 有效的字母异位词 验证回文字符串 实现strStr() 数数并说 最长公共前缀 字符串转整数(atoi) 反转字符串 和vector同样的进行sw ...

  4. LeetCode初级算法(数组)解答

    这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...

  5. 【LeetCode算法】LeetCode初级算法——字符串

      在LeetCode初级算法的字符串专题中,共给出了九道题目,分别为:反转字符串,整数反转,字符串中的第一个唯一字符,有效的字母异位词,验证回文字符串,字符串转换整数,实现strStr(),报数,最 ...

  6. LeetCode初级算法之数组:48 旋转图像

    旋转图像 题目地址:https://leetcode-cn.com/problems/rotate-image/ 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: ...

  7. LeetCode初级算法的Python实现--排序和搜索、设计问题、数学及其他

    LeetCode初级算法的Python实现--排序和搜索.设计问题.数学及其他 1.排序和搜索 class Solution(object): # 合并两个有序数组 def merge(self, n ...

  8. LeetCode初级算法的Python实现--链表

    LeetCode初级算法的Python实现--链表 之前没有接触过Python编写的链表,所以这里记录一下思路.这里前面的代码是和leetcode中的一样,因为做题需要调用,所以下面会给出. 首先定义 ...

  9. LeetCode初级算法的Python实现--字符串

    LeetCode初级算法的Python实现--字符串 # 反转字符串 def reverseString(s): return s[::-1] # 颠倒数字 def reverse(x): if x ...

随机推荐

  1. 说几个JS优化技巧吧

    JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...

  2. noip模拟赛 #3

    T1 给一个环,每个点有一个权值,把环分成三段,求最小的那段的最大值 sol:暴力 二分答案,chk就是把环搞成三倍链,每次枚举起点,后面三个切割点都可以二分找 然后就Rua过去了 //yyc wen ...

  3. POJ3294Life Forms(广义后缀自动机)(后缀数组+二分+数状数组)

    You may have wondered why most extraterrestrial life forms resemble humans, differing by superficial ...

  4. 2017.10.6北京清北综合强化班DAY6

    题目大意:改变一个数的位置 把一个序列变成不下降序列 题解: 设置一个pre,如果破坏单调性,就把‘删除’这个.否则把pre修改为当前元素的值. 考试时这样得了90分,是因为我的做法只能过这样的数据 ...

  5. MySQL Explain详解(转)

    explain SELECT a.* FROM test a,(select id from test where level_id <=4 order by aa_id limit 24300 ...

  6. AI-Info-Micron-Menu:About Micron

    ylbtech-AI-Info-Micron-Menu:About Micron 将数据带入生活 美光科技的存储技术帮助将海量数据化为宝贵见解,重新定义世界使用信息的方式. 1.返回顶部 1. 公司简 ...

  7. 一 vue开发环境搭建

    2016年,Vue同Angular.React形成三足鼎立的局面,让前端的开发者顾不暇接,今天我们就来了解一下Vue的环境搭建. 一.node.js安装: node.js:一种javascript的运 ...

  8. Python模块-logging模块(二)

    logging模块记录日志有四个主要类:logger,handler,formatter,filter logger提供了应用程序可以直接使用的接口,每个程序在输出信息之前都要获得一个Logger h ...

  9. WPF 导出Excel(合并单元格)

    WPF 导出Excel(合并单元格) DataTable 导出Excel(导出想要的列,不想要的去掉) ,B1,B2,B3,B4,B5} MisroSoft.Office.Interop.Excel. ...

  10. 问题:OAuth2.0;结果:帮你深入理解OAuth2.0协议

    1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题. 豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒 ...