Skip to content

#BIGO秋招笔试三道题 #290

@MyLinChi

Description

@MyLinChi

问题

1.和为0的三元组
2.反转链表的中间某一段
3.判断一个数是不是科学计数法表示的数

求解

#include<iostream>
#include<vector>
#include <string>
#include<algorithm>
using namespace std;
class Solution {
public:
    /*1.********************************************************************/
    vector<vector<int>> triple(vector<int>& nums) {
        int len = nums.size();
        sort(nums.begin(), nums.end());
        vector<vector<int>> res;
        for (int i = 0; i < len - 2 && (i==0 || nums[i]!=nums[i-1]); ++i) {
            int sum = -nums[i];
            for (int j = i + 1, k = len - 1; j < k &&(j==i+1 || nums[j]!=nums[j-1]);) {
                if (nums[j] + nums[k] == sum) {
                    res.push_back({ nums[i],nums[j],nums[k] });
                    ++j;
                    --k;
                }
                else if (nums[j] + nums[k] < sum) {
                    ++j;
                }
                else {
                    --k;
                }
            }
        }
        return res;
    }
    /*2.********************************************************************/
    struct ListNode
    {
        int val;
        ListNode* next;
    };

    ListNode* transfer(ListNode* src,int n,int m) {
        ListNode res, * tail = &res;
        ListNode* p = src;
        ListNode mid, * mhead = &mid,*mtail = &mid;
        for (int cnt = 1; p;++cnt,p=p->next) {
            if (cnt < n) {
                tail->next = p;
                tail = tail->next;
                p = p->next;
            }
            else if (cnt <= m) {
                ListNode* tmp = mhead->next;
                mhead->next = p;
                p = p->next;
                mhead->next->next = tmp;
            }
            else {
                break;
            }
        }
        tail->next = mid.next;
        mtail->next = p;
        return res.next;
    }
    /*3.********************************************************************/
    bool isInteger(string s) {
        bool first = true;
        for (int i = 0; i < s.size(); ++i) {
            if (s[i] < '0' || s[i]>'9')return false;
            else {
                if (s[i] == '0' && first)return false;
                else {
                    first = false;
                }
            }
        }
        return true;
    }

    bool isSigInteger(string s) {
        if (s[0] == '+' || s[0] == '-')
            return isInteger(s.substr(1));
        else
            return isInteger(s);
    }

    bool isFloatPart(string s) {
        for (int i = 0; i < s.size(); ++i) {
            if (s[i] < '0' || s[i]>'9')return false;
        }
        return true;
    }

    bool isbase(string s) {
        int i = 0;
        for (; i < s.size() && s[i] != '.'; ++i);
        if (i >= s.size()) {
            return isSigInteger(s);
        }
        else {
            string s1 = s.substr(0,i);
            string s2 = s.substr(i + 1);
            return isSigInteger(s1) && isFloatPart(s2);
        }
    }

    bool isScienceNum(string s) {
        if (s.empty())return false;
        int i = 0;
        for (; i < s.size() && s[i] != 'e'; ++i);
        if (i >= s.size()) {
            return isbase(s);
        }
        else {
            string s1 = s.substr(0, i);
            string s2 = s.substr(i + 1);
            return isbase(s1) && isSigInteger(s2);
        }
    }
    void fun() {
        string s;
        while (cin >> s) {
            cout << isScienceNum(s) << endl;
        }
    }
};
int main() {
    Solution sol;
    sol.fun();
    return 0;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions