缺失数字

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

class Solution {
public:
int missingNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
if(nums[0]!=0) return 0;
int l=nums.size();
if(nums[l-1]!=l-1)
{
for(int i=1;i<nums.size();i++)
if((nums[i]-nums[i-1])!=1) return nums[i-1]+1;
}
return l;
}
};

位1的个数

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

class Solution {
public:
int hammingWeight(uint32_t n) {
int count=0;
for(int i=0;i<32;i++)
{
count += (n&00000000000000000000000000000001);
n=n>>1;
}
return count;
}
};

颠倒二进制位

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

class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t res=0;
for(int i=0;i<32;i++)
{
if(n&1==1)
res=(res<<1)+1;
else
res=res<<1; n=n>>1;
}
return res;
}
};

有效的括号

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

class Solution {
public:
bool isValid(string s) {
stack<char> res;
for(int i=0;i<s.size();i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{') res.push(s[i]);
else{
if(res.empty()) return false;
if(s[i]==')' && res.top()!='(') return false;
if(s[i]==']' && res.top()!='[') return false;
if(s[i]=='}' && res.top()!='{') return false;
res.pop();
}
}
if(res.empty())
return true;
else
return false;
}
};

汉明距离

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

class Solution {
public:
int hammingDistance(int x, int y) {
int count=0;
for(int i=0;i<32;i++)
{
if((x&(1<<i))^(y&(1<<i)))
count++;
}
return count;
}
};

此外还有其他判断方式:

class Solution {
public:
int hammingDistance(int x, int y) {
int res = 0, exc = x ^ y;
while (exc) {
++res;
exc &= (exc - 1);
}
return res;
}
};

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

帕斯卡三角形

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

class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int> > res;
if(numRows<=0) return res;
res.assign(numRows,vector<int>(1));
for(int i=0;i<numRows;i++)
{
res[i][0]=1;
if(i==0) continue;
for(int j=1;j<i;j++)
{
res[i].push_back(res[i-1][j]+res[i-1][j-1]);
}
res[i].push_back(1);
}
return res;
}
};

大神的代码很清晰,帕斯卡三角形两边都是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. Linux下视频流媒体直播服务器搭建详解

    目标: 搭建网络直播流媒体服务器系统(Linux操作系统) 背景: 用于OTT-TV大并发的直播和点播的一套流媒体服务器系统.支持N x 24小时录制回看和直播的服务器端解决方案. 解决方案: l  ...

  2. p2p视频点播系统开发案例――Myseelite

    项目地址:http://sourceforge.net/projects/myseelite/ 1. MySee公司倡导的开源项目,目前国内功能最强大的一个开源系统. 2. 一个直播(也支持轮播.点播 ...

  3. Mysql 排序null值 排序问题分析

    mysql中null值的排序问题分析   如下表t_user:  name age zhangsan 1 lisi NULL wangwu 2   www.2cto.com   执行一下sql:  S ...

  4. spark提交异常日志分析

    java.lang.NoSuchMethodError: org.apache.spark.sql.SQLContext.sql(Ljava/lang/String;)Lorg/apache/spar ...

  5. 通用RowMapper封装查询结果到自定义类中

    package object; import java.lang.reflect.Field;import java.sql.ResultSet;import java.sql.SQLExceptio ...

  6. JQUERYUI 框架 http://jqueryui.com/

    http://jqueryui.com/

  7. Poj 2533 Longest Ordered Subsequence(LIS)

    一.Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequenc ...

  8. Python函数(十二)-迭代器

    字符串,列表,元组,字典,集合,生成器这些能通过for循环来遍历的数据类型都是可迭代对象 可通过isinstance判断是不是可迭代对象 >>> from collections i ...

  9. BO 与 VO 的属性拷贝 copyProperties(bo,vo)

    NewClass extends OldClass   : newClass继承自oldClass,属性大多数相同,但是也有新的扩展. beanUtils.copyProperties(oldClas ...

  10. [poj3259]Wormholes(spfa判负环)

    题意:有向图判负环. 解题关键:spfa算法+hash判负圈. spfa判断负环:若一个点入队次数大于节点数,则存在负环.  两点间如果有最短路,那么每个结点最多经过一次,这条路不超过$n-1$条边. ...