缺失数字

最初的想法是将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. 1143. Lowest Common Ancestor (30)

    The lowest common ancestor (LCA) of two nodes U and V in a tree is the deepest node that has both U ...

  2. spring IOC 注解@Autowired

    自动装配:按照类型来找 会在xml中找类型一样的, 比如 setMessage(SetName setName)上面有@Autowired,会到xml中找<bean id="setna ...

  3. Wireshark抓包常见问题解析

    1.   tcp out-of-order(tcp有问题) 解答: 1).    应该有很多原因.但是多半是网络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,需要重新组合数据单元 因为他们可能是 ...

  4. JAVA相关资料

    http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-answers/ http://www.cnblo ...

  5. xdu2017校赛F

    Problem F Dogs of Qwordance Senior Backend R&D Engineers 问题描述 那年夏天,锘爷和杰师傅漫步在知春公园的小道上.他们的妻子.孩子牵 着 ...

  6. [HDU1754]I Hate It线段树裸题

    http://acm.hdu.edu.cn/showproblem.php?pid=1754 解题关键:刚开始死活超时,最后发现竟然是ch,和t1.t2每次循环都定义的锅,以后养成建全局变量的习惯. ...

  7. 杭电acm 1033题

    Problem Description For products that are wrapped in small packings it is necessary that the sheet o ...

  8. BOX (UVA-1587) 比较代码书写上的差距

    对比一下代码的书写差距: 我的代码: #include<iostream> using namespace std; ]; ]; ]; //访问标记 bool judge(int i, i ...

  9. AQS(AbstractQueuedSynchronizer)介绍-01

    1.概述 AQS( AbstractQueuedSynchronizer ) 是一个用于构建锁和同步器的框架,许多同步器都可以通过AQS很容易并且高效地构造出来.如: ReentrantLock 和 ...

  10. 匿名委托(方法) 以 ThreadStart 为例

    Hello Tec.   匿名委托(方法) 以 ThreadStart 为例 REF:http://baike.baidu.com/view/2761370.htm?fr=aladdin   不使用匿 ...