依图凉凉经(送两道算法题)

第一道题目是二维有序矩阵查找特定target是否存在。二维有序矩阵是指每一行和每一列分别是递增的。
此题目的较优解法是每次比较剩余矩阵的右上角的元素key和target的关系,初始值row=0,col=nums[0].size()-1,target小于key时,key所在的列及右边列都比target打,故把col变量减一,target大于key时,key所在的行都比target小,故把row变量加一。直到row和col越界。返回false。(参考下图)
https://img-blog.csdn.net/20160324195705030

#include <bits/stdc++.h>
using namespace std;
bool isExists(vector<vector<int>> &nums, const int target) {
    int row = 0, col = nums[0].size()-1;
    while(row < nums.size() && col >= 0) {
        if(target == nums[row][col]) {
            return true;
        }else if(target < nums[row][col]) {
            col--;
        } else {
            row++;
        }
    }
    return false;
}
int main(){
    vector<vector<int>> v = {{1,2,3,4}, {2,3,4,5}, {3,4,5,6}, {4,5,6,7}};
    cout << to_string(isExists(v, 10)) << endl;
    cout << to_string(isExists(v, 7)) << endl;
    return 0;
}

第二题,求字符串中"YTTYYTYTYTYTT"Y和T的数量相等的最长字串,这道题目可以类比为经典题目:最长01字串的问题。不多废话了,直接上代码

#include <bits/stdc++.h>
using namespace std;
bool isExists(vector<vector<int>> &nums, const int target) {
    int row = 0, col = nums[0].size()-1;
    while(row < nums.size() && col >= 0) {
        if(target == nums[row][col]) {
            return true;
        }else if(target < nums[row][col]) {
            col--;
        } else {
            row++;
        }
    }
    return false;
}

int longest0_1(const vector<int> &nums){
    vector<int> part_sum;
    int sum = 0;
    for(int i = 0; i < nums.size(); i++) {
        sum += nums[i];
        part_sum.push_back(sum);
    }
    int ans = 0;
    map<int,int> mp;
    for(int i = 0; i < part_sum.size(); i++) {
        if(mp.count(part_sum[i]) == 0) {
            mp[part_sum[i]] = i;
        } else {
            ans = max(ans, i-mp[part_sum[i]]);
        }
    }
    return ans;
}
int main(){
    vector<int> v = {-1,-1,1,-1,1};
    cout << longest0_1(v) << endl;
    return 0;
}

PS:前两天感冒发烧状态太差,面试时这两道题都凉了。回来之后思考了一下题目,来回馈牛友。

#笔试题目##依图科技#
全部评论
第二题可以把Y和T分别看成-1和1,所以题目就变成了求最长子数组和为0的长度。
点赞 回复 分享
发布于 2019-08-15 15:07
第一题剑指原题哦
点赞 回复 分享
发布于 2019-08-15 14:40
第二题思路是什么啊,楼主
点赞 回复 分享
发布于 2019-08-15 15:18
居然和我面试的时候一样的题😂 我是7月份面的……
点赞 回复 分享
发布于 2019-08-18 14:01
大佬有参加之前的笔试吗?还是直接面的?
点赞 回复 分享
发布于 2019-08-19 18:29
兄弟投的什么岗位啊
点赞 回复 分享
发布于 2019-08-27 21:38

相关推荐

目前感觉简历还有很多问题,希望各位能不吝赐教以及非常感谢这位老哥——@黑皮白袜臭脚体育生&nbsp;的项目,学完一遍感觉受益颇丰
小菜鸡只想转正:校友,我的建议是冗余的最好去掉,突出重点,比如985,211双一流的提示,专业技能调整到个人项目之后的位置。专业技能感觉写的太细了?占用篇幅最好腾出一点给项目经历,如果没写手机号和邮箱,记得加上。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
37
分享

创作者周榜

更多
牛客网
牛客企业服务