LeetCode初级算法(其他篇)
缺失数字
最初的想法是将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初级算法(其他篇)的更多相关文章
- LeetCode初级算法(树篇)
目录 二叉树的最大深度 验证二叉搜索树 对称二叉树 二叉树的层次遍历 将有序数组转换为二叉搜索树 二叉树的最大深度 二叉树,所以可以考虑用递归来做.由于根节点已经算过了,所以需要加上1:每次返回都是以 ...
- Leetcode初级算法(链表篇)
删除链表的倒数第N个节点 感觉自己对于链表的知识还是了解的不够深入,所以没有想到用双指针进行操作.我的想法是这样的,首先计算整个链表的长度,然后遍历到长度减去n的节点处,执行删除操作. 自己的代码: ...
- Leetcode初级算法(字符串篇)
目录 反转字符串 颠倒整数 字符串中的第一个唯一字符 有效的字母异位词 验证回文字符串 实现strStr() 数数并说 最长公共前缀 字符串转整数(atoi) 反转字符串 和vector同样的进行sw ...
- LeetCode初级算法(数组)解答
这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...
- 【LeetCode算法】LeetCode初级算法——字符串
在LeetCode初级算法的字符串专题中,共给出了九道题目,分别为:反转字符串,整数反转,字符串中的第一个唯一字符,有效的字母异位词,验证回文字符串,字符串转换整数,实现strStr(),报数,最 ...
- LeetCode初级算法之数组:48 旋转图像
旋转图像 题目地址:https://leetcode-cn.com/problems/rotate-image/ 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: ...
- LeetCode初级算法的Python实现--排序和搜索、设计问题、数学及其他
LeetCode初级算法的Python实现--排序和搜索.设计问题.数学及其他 1.排序和搜索 class Solution(object): # 合并两个有序数组 def merge(self, n ...
- LeetCode初级算法的Python实现--链表
LeetCode初级算法的Python实现--链表 之前没有接触过Python编写的链表,所以这里记录一下思路.这里前面的代码是和leetcode中的一样,因为做题需要调用,所以下面会给出. 首先定义 ...
- LeetCode初级算法的Python实现--字符串
LeetCode初级算法的Python实现--字符串 # 反转字符串 def reverseString(s): return s[::-1] # 颠倒数字 def reverse(x): if x ...
随机推荐
- [转]_int64、long long 的区别
大学生程序代写 C++的64位整数[原]by 赤兔 http://baike.baidu.com/view/1235293.htm 在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常 ...
- luoguP1941福赖皮波德
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...
- 2017-2018-1 20179203 《Linux内核原理与分析》第三周作业
攥写人:李鹏举 学号:20179203 ( 原创作品转载请注明出处) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...
- bzoj 3916: friends 瞎搞
题目: 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. 题解: 发现字符串的长度一定为奇数. ...
- 【LeetCode】019. Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- 标准模板库(STL)学习指南之List链表
本文转载自天极网,原文地址:http://www.yesky.com/255/1910755.shtml.转载请注明 什么是STL呢?STL就是Standard Template Library,标准 ...
- Azure自动化部署服务 (2)
上一篇文章介绍了如何通过添加用户名和密码的方式实现自动化部署服务中与Azure Subscription的连接. 本文将介绍如何使用证书的方式实现Azure Automation与Azure的Subs ...
- Python:代码单元、代码点介绍
转于:https://www.cnblogs.com/runwulingsheng/p/5106078.html 博主:你是那天边突然划过的一道闪电 代码点:指编码表(比如Unicode)中某个字符的 ...
- 问题:C# Dictionary嵌套使用;结果:嵌套Dictionary添加 , C#2.0泛型详细介绍
Dictionary<int, Dictionary<string, string>> dict1 = new Dictionary<int, Dictionary< ...
- 新版 Spring下载方法
1.百度 Spring 打开官方网站 http://spring.io/ 2.======================================= 3.================= ...