深圳店匠笔试题-4.01

一:题目类型

10个选择10个填空2道编程题

二:编程题

1:34 在排序数组中查找元素的第一个和最后一个位置在这里插入图片描述


class Solution {
public:
    /**
       思路:
            1.分为两种情况 那就是该元素是存在于排序数组当中,该元素不存在该排序数组当中。
            2.如果元素是存在于排序数组当中的,那么我们求取其左右边界
            3.如果元素不存在于排序数组当中,那么也有两种情况
                1>:该元素的大小是在 排序数组当中的  例如  [2,5] 3
                2>:该元素的大小是在 排序数组之外的 例如 
                      [2,5] 6 :在这个当中  我们是可以求取到其右边界的位置的,但是左边界求取不到  
                      [2,5] 1 :我们是可以求取到左边界位置的  但是求取不到右边界


    */
    vector<int> searchRange(vector<int>& nums, int target) {

        int leftAns = leftBoder(nums,target);
        int rightAns = rightBoder(nums,target);

        //倒数第一种情况
        if(leftAns == -2  || rightAns == -2) return {-1,-1};

        //倒数第三种情况
        if(rightAns - leftAns > 1) return {leftAns + 1,rightAns-1};

        //倒数第二种情况
        return {-1,-1};

    }

    //求取右边界 由左边界不断逼近
     int rightBoder(vector<int> nums,int target) {

            int left = 0;
            int right = nums.size()-1;

            int rightAns = -2;


            while(left <= right) {

                int mid = (left + right)/2;

                if(nums[mid] > target) {
                    right = mid -1;
                } else {
                    left = mid + 1;
                    rightAns = left;//因为上方的mid + 1,所以当left = right 时 left + 1,  
                }                 //赋值给 rightAns ,那么右边界就比实际值大一
                
            }
            
            return rightAns;
     }

    //求取左边界 由右边界不断逼近
    int leftBoder(vector<int>& nums,int target) {
        int left = 0;
        int right = nums.size()-1;

        int leftAns = -2;

        while (left <= right) {
            int mid = (left+right)/2;

            if (nums[mid] < target) {
                left = mid+1;
            } else {
                right = mid - 1;
                leftAns = right;
            }

        }

        return leftAns;
    }

};

2:101 对称二叉树

在这里插入图片描述


class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        /**
            思路:我们其实也就是利用栈先进先出的特性   我们将我们需要比较的两个结点放进栈中
                然后先进行判断,然后再将该两个结点的左右结点放进栈中,但是我们放入的顺序
                是需要注意的 因为是要比较对称 所以
                左节点的左孩子,右节点的右孩子
                左节点的有孩子,右节点的左孩子
        */

        if(root == nullptr) return false;

        stack<TreeNode*>st;
        st.push(root->left);
        st.push(root->right);

        while(!st.empty()) {
            TreeNode* leftNode = st.top(); st.pop();
            TreeNode* rightNode = st.top(); st.pop();

            if(leftNode == NULL && rightNode == NULL) continue;

            //左节点空,右节点不空
            //右节点空,左节点不空
            //左右结点都不空 但其值不相等

            if(leftNode == NULL || rightNode == NULL || (leftNode->val != rightNode->val)) 
            return false;


            st.push(leftNode->left);
            st.push(rightNode->right);

            st.push(leftNode->right);
            st.push(rightNode->left);
        }

        return true;
    }
};

群里的大佬都好吊啊
收到笔试题邀请的我激动极了
因为简历没挂
但大佬们 一句 这小厂也配有笔试题
可见今年春招实习又是
鸡毛卷上天了
连小厂都得通过一轮笔试筛选面试的人了
知道自己菜 不能跟人比
自己是一场笔试也不敢错过

找工作也就是闹着玩 富士康才是人生真谛

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天向上的菜鸡杰!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值