总结?
其实算不得总结,lintcode这个在专题不会再更新了,准备秋招的时候大概看过一遍这个,有些还是很有用的,然后剑指offer差不多刷了一遍,过些天闲了我把剑指offer的刷题总结完毕,地址在:剑指offer刷题记C++。 下面是今年笔试时记录的几个题。
1. 复数卷积。
题目我就不念了,需要计算两个复数序列的卷积,依次输入10个复数,先实后虚,计算卷积后输出。读写数据就不管了,直接上代码。 卷积原理自然不必多少,三步走:翻转,移位,乘加。
#pragma warning (disable:4996);
// 本题为考试多行输入输出规范示例,无需提交,不计分。
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int min(int x, int y)
{
if (x < y)
return x;
else
return y;
}
int max(int x, int y)
{
if (x < y)
return y;
else
return x;
}
//复数类,只定义了构造函数,为了简单数据也公有了
class FuShu {
public:
FuShu(int x, int y) :a(x), b(y) {}
int a;
int b;
};
//复数乘法
FuShu multiply(FuShu x, FuShu y)
{
FuShu res(0, 0);
res.a = x.a*y.a - x.b*y.b;
res.b = x.a*y.b + y.a*x.b;
return res;
}
//复数加法
FuShu add(FuShu x, FuShu y)
{
FuShu res(0, 0);
res.a = x.a + y.a;
res.b = x.b + y.b;
return res;
}
int main() {
//freopen("1.in","r",stdin);
vector<FuShu> data;
FuShu tmp(0, 0);
int x;
for (int i = 0; i < 20; i++) {
scanf("%d", &x);
if (i % 2 == 0) //实部
tmp.a = x;
else
tmp.b = x; //虚部
if (i>=1 && i % 2 == 1) //一开始这里写的大于1导致第一个数没有push进来。
data.push_back(tmp);
}
vector<FuShu> a = vector<FuShu>(data.begin(), data.begin() + 5);
vector<FuShu> b = vector<FuShu>(data.begin() + 5, data.end());
int m = a.size();
int n = b.size();
FuShu cnt(0, 0);
vector<FuShu> res;
for (int i = 0; i<m+n-1; i++)
{
for (int k =max(0,i+1-5); k <= min(i,4); k++) //主要是k的起始条件需要注意。一开始都是从0开始的,后面才需要从(i+1)%5开始。
{
cnt = add(cnt, multiply(a[k], b[i - k]));
}
res.push_back(cnt);
cout << i << ": " << cnt.a << " " << cnt.b << endl;
cnt = FuShu(0, 0);
}
}
2. 求输入字符中的数的和。
对于输入的一串字符串,提取其中的数字并输出其和,字符串的输入可能是字母,标点,数字。
比如: A12N34 则和为12+34=46
比如: A1,2N34 则和为1+2+34=37
比如: -12A23 则和为-12+23=11
有多个 -
的话的 奇数个为负数,偶数个为正。
int main()
{
string str = "AB1d--2Bd12";
int sz = str.size();
int i = 0;
bool isPositive;
int cnt = 0;
int res = 0;
while(i<sz)
{
isPositive = true;
while (i < sz&&str[i] == '-')
{
isPositive = !isPositive;
i++;
}
while (i < sz&&str[i] >= '0'&&str[i] <= '9')
{
cnt = cnt * 10 + (str[i] - '0');
i++;
}
if (!isPositive) cnt = -cnt; //查看累计,如果是正的,就是正的,如果是负的,那么要变号
res += cnt;
cnt = 0; //清零
i++;
}
cout << res << endl;
return 0;
}
3. 三角形的数目。
给定一组数,全为正数,任意挑出三个数看是否可以组成三角形,如果可以就算一个计数,求所有可能的组合数,相同的数在不同的位置视为不同的组合。
排序之后,从数字末尾开始往前遍历,将left指向首数字,将right之前遍历到的数字的前面一个数字,然后如果left小于right就进行循环,循环里面判断如果left指向的数加上right指向的数大于当前的数字的话,那么right到left之间的数字都可以组成三角形,这是为啥呢,相当于此时确定了i和right的位置,可以将left向右移到right的位置,中间经过的数都大于left指向的数,所以都能组成三角形,就说这思路叼不叼!加完之后,right自减一,即向左移动一位。如果left和right指向的数字之和不大于nums[i],那么left自增1,即向右移动一位,参见代码如下:
int numOfTriangle(vector<int> &numbers)
{
int cnt = 0;
int sz = numbers.size();
sort(numbers.begin(),numbers.end());
for (int i = sz; i > 1; i--)
{
int left = 0;
int right = i-1;
while (left <= right)
{
if (numbers[left] + numbers[right] > numbers[i])
{
cnt += (right - left);
right--;
}
else
left++;
}
}
return cnt;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [ 利器篇 ] - Microsoft Surface Pro 系列安装 Ubuntu 16.04 系统
- 如何优雅的打造 All-in One 仓库
- matplotlib绘图教程:设置标签与图例
- 企业是如何从头开发一个商业项目的?
- 基于Haproxy的高可用实战
- 组复制常规操作-分布式恢复 | 全方位认识 MySQL 8.0 Group Replication
- 赞!7000 字学习笔记,MySQL 从入到放弃
- 面试官问我Volatile的原理?从操作系统层面的设计怼回去!
- 设计原则之单一职责
- 设计原则之开闭原则
- SpringBoot执行跨域处理
- SpringBoot对全局异常的处理封装
- 自定义springboot-starter揭秘自动配置骚操作
- 【大厂面试题】Redis中是如何实现分布式锁的?
- 最近公司招人,研发组商量了下,暂时定下这么多java面试题!