zoukankan      html  css  js  c++  java
  • 剑指Offer——01天

    二维数组中的查找

    • 由于矩阵是有序的,我们从矩阵的左下角来看,向上的递减的,向右是递增的,因此要从左下角开始寻找,当目标数字比左下角的数字大时右移,当目标数字小时上移
    class Solution {
    public:
        bool Find(int target, vector<vector<int> > array) {
            int x,y,max_y;
            x=array.size()-1;
            y=0;
            max_y=array[0].size();
            while(y<max_y&&x>=0)
            {
                if(target>array[x][y])
                {
                    y++;
                }
                else if(target<array[x][y])
                {
                    x--;
                }
                else return true;
            }
            return false;
        }
    };

     替换空格

    • 从后往前找空格,遇到空格先把后面的字符串往后移,再将空格位置替换成“%20”即可
    class Solution {
    public:
        void replaceSpace(char *str,int length) {
            for(int i=length-1;i>=0;i--)
            {
                if(str[i]==' ')
                {
                    for(int j=length-1;j>i;j--)
                    {
                        str[j+2]=str[j];
                    }
                    str[i]='%';
                    str[i+1]='2';
                    str[i+2]='0';
                    length+=2;
                }
            }
        }
    };

    从尾到头打印链表

    • 将链表从头到尾扫一遍,利用STL每次插在最前面即可,注意head是有值的
    class Solution {
    public:
        vector<int> printListFromTailToHead(ListNode* head) {
            vector <int> num;
            while(head!=NULL)
            {
                num.insert(num.begin(),head->val);
                head=head->next;
            }
            return num;
        }
    };

    重建二叉树

    • 递归思想
    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
            int n = pre.size();
            if(n==0) return NULL;
            TreeNode * root = new TreeNode(pre[0]);
            vector <int> left_pre,left_vin,right_pre,right_vin;
            int p=0;
            for(p;p<n;p++)
            {
                if(vin[p]==pre[0])
                {
                    break;
                }
            }
            for(int i=0;i<n;i++)
            {
                if(i<p)
                {
                    left_pre.push_back(pre[i+1]);
                    left_vin.push_back(vin[i]);
                }
                else if(i>p)
                {
                    right_pre.push_back(pre[i]);
                    right_vin.push_back(vin[i]);
                }
            }
            root->left =  reConstructBinaryTree(left_pre,left_vin);
            root->right =  reConstructBinaryTree(right_pre,right_vin);
            
            return root;
        }
    };

    利用两个栈实现队列

    • 不解释
    class Solution
    {
    public:
        void push(int node) {
            stack1.push(node);
        }
    
        int pop() {
            int k;
            while(!stack1.empty())
            {
                k = stack1.top();
                stack1.pop();
                stack2.push(k);
            }
            stack2.pop();
            while(!stack2.empty())
            {
                int m = stack2.top();
                stack2.pop();
                stack1.push(m);
            }
            return k;
        }
    
    private:
        stack<int> stack1;
        stack<int> stack2;
    };

     旋转数组的最小数字

    • 这是一道二分的变形题,若data[mid]>data[r],说明最小的元素在右边的区间里,l=mid+1;
    • 反之,r--,因为可能存在这样的一个序列 111161
    class Solution {
    public:
        int minNumberInRotateArray(vector<int> rotateArray) {
            int n = rotateArray.size();
            if(n==0) return 0;
            else if(n==1) return rotateArray[0];
            int l = 0;
            int r = n-1;
            int mid;
            while(l<=r)
            {
                mid = (l+r)/2;
                if(rotateArray[mid]>rotateArray[n-1]) l=mid+1;
                else r--;
            }
            return rotateArray[l];
        }
    };
  • 相关阅读:
    Vue中使用clipboard实现复制功能
    在 Window 关闭时,无法将 Visibility 设置为 Visible,也无法调用 Show、ShowDialog、Close 或 WindowInteropHelper.EnsureHandle。
    iTextSharp 给PDF添加水印
    VS2017登录账户提示升级Edge浏览器的问题
    vue表单中,自动过滤前后空字符,再也不用正则表达式了
    vue中 axios的封装
    vue中 axios的封装
    js实现身份证、手机号加密,加密类型为*
    web前端,传统的jquery与vue结合,开发应用
    推荐系统入门笔记1---基于内容推荐的基础架构
  • 原文地址:https://www.cnblogs.com/simplekinght/p/8544552.html
Copyright © 2011-2022 走看看