总结?

其实算不得总结,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;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

Caffe中LMDB的使用

http://rayz0620.github.io/2015/05/25/lmdb_in_caffe/

2281
来自专栏蘑菇先生的技术笔记

探索c#之一致性Hash详解

2565
来自专栏SIGAI学习与实践平台

编写基于TensorFlow的应用之构建数据pipeline

本文主要以MNIST数据集为例介绍TFRecords文件如何制作以及加载使用。所讲内容可以在SIGAI 在线编程功能中的sharedata/intro_to_t...

1232
来自专栏梦里茶室

TensorFlow 深度学习笔记 逻辑回归 实践篇

Practical Aspects of Learning Install Ipython NoteBook 可以参考这个教程 可以直接安装anaconda,里...

2127
来自专栏菩提树下的杨过

mxnet安装及NDArray初体验

一、mxnet安装 (以下均为mac环境) 有二种方式: 1.1 用conda安装 1 #创建gluon目录 2 mkdir gluon-tutorial...

2886
来自专栏点滴积累

geotrellis使用(四)geotrellis数据处理部分细节

       前面写了几篇博客介绍了Geotrellis的简单使用,具体链接在文后,今天我主要介绍一下Geotrellis在数据处理的过程中需要注意的细节,或者...

3485
来自专栏marsggbo

Udacity并行计算课程笔记-The GPU Programming Model

一、传统的提高计算速度的方法 faster clocks (设置更快的时钟) more work over per clock cycle(每个时钟周期做更多的...

2597
来自专栏PaddlePaddle

【使用指南】PaddlePaddle安装编译问题汇总和基本使用概念

编写|PaddlePaddle 排版|wangp Part1 安装编译问题汇总 ? 用户在使用PaddlePaddle GPU的Docker镜像的时候,常常出现...

4299
来自专栏安恒网络空间安全讲武堂

hackme.inndy.tw的19道web题解(下)

目录 写在前面 ...... dafuq-manager 1 dafuq-manager 2. dafuq-manager 3. wordpress 1. w...

1.3K7
来自专栏简书专栏

基于jieba、TfidfVectorizer、LogisticRegression的文档分类

jieba中文叫做结巴,是一款中文分词工具,官方文档链接:https://github.com/fxsjy/jieba TfidfVectorizer中文叫做...

1.8K3

扫码关注云+社区

领取腾讯云代金券