今日头条笔试题

//=======================今日头条=============================
/*
题目描述:
给定两个长度为 n 的整数数列 A 和 B。再给定 q 组查询,每次查询给出两个整数 x 和 y,求满足 Ai >= x 且 Bi >= y 这样的 i 的数量。
输入
第一行给定两个整数 n 和 q。
第二行给定数列 A,包含 n 个整数。
第三行给定数列 B,包含 n 个整数。
接下来 q 行,每行两个整数 x 和 y,意义如上所述。
输出
对于每组查询,输出所求的下标数量。

样例输入
3 2
3 2 4
6 5 8
1 1
4 8
样例输出
3
1
*/

/*3
题目描述:
垂直绘制一个中括号的序列 并用中括号的大小表示层次关系
绘制 [[[]]][] 这个括号序列
如图:



绘图遵守以下原则:
各个括号之间没有空格 只有在左右括号在最里层配对时 中间才会有一条空行
里层的括号必定小于外层的括号
同一层次的括号大小相同(比如上述的样例 最下面的括号和上面的大括号相同大小)
输入
输入一个以括号组成的字符串
输出
输出绘制的图形 保证括号匹配序列合法

样例输入
[][][]
样例输出
+-+
| |

| |
+-+
+-+
| |

| |
+-+
+-+
| |

| |
+-+
(下图为样例输出的图片格式,供参考)

*/

/*
2.
给定一个段落,由 N 个句子组成。第 i 个句子的长度为 L[i],包含的单词个数为 W[i]。
句子不包含任何除字母和空格( ) 外的符号。
每个句子内部,含有若干个单词,由空格( ) 分隔。句子不会包含连续的空格。

随后给定 M 个查询,每个查询包含一个句子,需要在段落中寻找相同单词数量最多的句子。重复的单词只计一次,且不区分大小写。
输入数据将保证结果是存在且唯一的。

input:
第一行是两个整数 N 和 M。
接下来的 N+M 行,每行包含一个句子。
前 N 行代表段落中的句子,后 M 行表示查询。

output:
输出 M 行,每行代表查询的结果。

样例输入
6 3
An algorithm is an effective method that can be expressed within a finite amount of space and time
Starting from an initial state and initial input the instructions describe a computation
That when executed proceeds through a finite number of successive states
Eventually producing output and terminating at a final ending state
The transition from one state to the next is not necessarily deterministic
Some algorithms known as randomized algorithms incorporate random input
Next to the transition
Wormhole infinite time and space
The transition from one state to the next is not necessarily deterministic

样例输出
The transition from one state to the next is not necessarily deterministic
An algorithm is an effective method that can be expressed within a finite amount of space and time
The transition from one state to the next is not necessarily deterministic

*/





/*
按数组的形式给出函数f(x)的取值,即数组A的A[0]元素为f(0)的取值,数组的取值都为整数,
函数在每个点都是严格单调递增或者严格递减(即A[i-1] != A[i] != A[i+1]),
要求找出最宽的先上升后下降的区间(这个区间内函数的值必须先上升到一个点然后下降,区间的上升段和下降段长度必须都大于0)。
1. 如果找到符合条件的最大区间输出数组对应的左右下标(有多个最大区间时,输出最左边的那个”)
2. 找不到那么输出-1 -1
input:
10
1 3 1 2 5 4 3 1 9 10

output:
2 7
*/


// 终于 全部ac,但是还是有点问题
int main_toutiao1(){
    int len;
    vector<int> nums;
    cin >> len;
    for (int i = 0; i < len; i++){
        int temp;
        cin >> temp;
        nums.push_back(temp);
    }

    int left = 0; int right = 0; bool up = false; bool down = false;
    int max = right - left;
    int A = 0; int B = 0;

    for (int i = 0; i < len - 1; i++){
        if (nums[i + 1]>nums[i]){
            if (down == false){
                right = i + 1;
            }
            if (down == true){
                if (right - left > max){
                    max = right - left;
                    A = left;
                    B = right;
                }
                left = i;
                right = i + 1;
                down = false;
            }
            up = true;
        }

        if (nums[i + 1] < nums[i]){
            if (up == true){
                right = i + 1;
            }
            if (up == false){
                if (down == false) {
                    left = i + 1;
                    right = i + 1;
                }
                if (down == true)
                    right = i + 1;
            }
            down = true;
        }
    }

    if (right - left > max && down ==true&& up ==true){
        max = right - left;
        A = left;
        B = right;
    }

    if (A == 0 && B == 0) 
        cout << -1 << " " << -1;
    else
        cout << A << " " << B;

    return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值