zoukankan      html  css  js  c++  java
  • 华为机试复习--数组

    NC61 两数之和

    题目描述
    给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
    你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的
    假设给出的数组中只存在唯一解
    例如:

    给出的数组为 {20, 70, 110, 150},目标值为90
    输出 index1=1, index2=2

    示例1
    输入
    [3,2,4],6

    返回值
    [2,3]

    #include<unordered_map>
    class Solution {
    public:
        /**
         * 
         * @param numbers int整型vector 
         * @param target int整型 
         * @return int整型vector
         */
    //     vector<int> twoSum(vector<int>& numbers, int target) {
    //         // write code here
    //         vector<int> ans;
    //         for(auto i=0;i<numbers.size();i++){
    //             int t=target-numbers[i];
    //             for(auto j=i+1;j<numbers.size();j++){
    //                 if(t==numbers[j]){
    //                     ans.push_back(i+1);
    //                     ans.push_back(j+1);
    //                     return ans;
    //                 }
    //             }
    //         }
    //         return ans;
    //     }
        vector<int> twoSum(vector<int>& numbers, int target){
            vector<int> ans;
            unordered_map<int,int> ma;
            for(int i=0;i<numbers.size();i++){
                ma[numbers[i]]=i;//val--key
            }
            for(int i=0;i<numbers.size();i++){
                int t=target-numbers[i];
                if(ma.find(t)!=ma.end()&&ma.at(t)>i){
                    ans={i+1,ma.at(t)+1};
                    return ans;
                }
            }
            return ans;
        }
    };
    

    NC65 斐波那契数列

    题目描述
    大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n≤39
    示例1
    输入
    4
    返回值
    3

    class Solution {
    public:
        int fb[45]={0};
        int Fibonacci(int n) {
            if(n==0)
                return 0;
            else if(n==1)
                return 1;
            else if(fb[n]!=0)
                return fb[n];
            else{
                fb[n]=Fibonacci(n-1)+Fibonacci(n-2);
                return Fibonacci(n-1)+Fibonacci(n-2);
            }
        }
    };
    

    NC73 数组中出现次数超过一半的数字

    题目描述
    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
    示例1
    输入
    [1,2,3,2,2,2,5,4,2]

    返回值
    2

    #include<unordered_map>
    class Solution {
    public:
        int MoreThanHalfNum_Solution(vector<int> numbers) {
            unordered_map<int,int> ma;
            for(int i=0;i<numbers.size();i++){
                ma[numbers[i]]++;
                if(ma[numbers[i]]>numbers.size()/2)
                    return numbers[i];
            }
            return 0;
        }
    };
    

    NC37 合并区间

    题目描述
    给出一组区间,请合并所有重叠的区间。
    请保证合并后的区间按区间起点升序排列。
    示例1
    输入
    [[10,30],[20,60],[80,100],[150,180]]

    返回值
    [[10,60],[80,100],[150,180]]

    /**
     * Definition for an interval.
     * struct Interval {
     *     int start;
     *     int end;
     *     Interval() : start(0), end(0) {}
     *     Interval(int s, int e) : start(s), end(e) {}
     * };
     */
    class Solution {
    public:
        static bool cmp(const Interval &a,const Interval &b){
            return (a.start<b.start);
        }
        vector<Interval> merge(vector<Interval> &intervals) {
            sort(intervals.begin(),intervals.end(),cmp);//按照区间左端点大小排序
            vector<Interval> res;
            for(int i=0;i<intervals.size();){
                int l=intervals[i].start;
                int r=intervals[i].end;
                int ni=i+1;
                for(int j=i+1;j<intervals.size();j++){
                    if(intervals[j].start<=r){
                        r=max(intervals[j].end,r);
                        ni=j+1;
                    }
                }
                res.push_back({l,r});
                i=ni;
            }
            return res;
        }
    };
    

    NC18 顺时针旋转矩阵

    题目描述

    有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。

    给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。
    示例1
    输入
    复制

    [[1,2,3],[4,5,6],[7,8,9]],3

    返回值
    复制

    [[7,4,1],[8,5,2],[9,6,3]]

    class Solution {
    public:
        vector<vector<int> > rotateMatrix(vector<vector<int> > mat, int n) {
            // write code here
            vector<vector<int>> ans=vector(n, vector<int>(n));
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    ans[i][j]=mat[n-j-1][i];
                }
            }
            return ans;
        }
    };
    

    NC59 矩阵的最小路径和

    题目描述
    给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。
    示例1
    输入
    [[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]

    返回值
    12

    备注:
    1≤n,m≤2000
    1≤arri,j≤100

    class Solution {
    public:
        /**
         * 
         * @param matrix int整型vector<vector<>> the matrix
         * @return int整型
         */
        int minPathSum(vector<vector<int> >& matrix) {
            // 最小路径和
            vector<vector<int>> dp=vector(2000, vector<int> (2000));
            int n=matrix.size();
            int m=matrix[0].size();
            dp[0][0]=matrix[0][0];
            for(int i=1;i<m;i++)
                dp[0][i]=dp[0][i-1]+matrix[0][i];
            for(int i=1;i<n;i++)
                dp[i][0]=dp[i-1][0]+matrix[i][0];
            for(int i=1;i<n;i++){
                for(int j=1;j<m;j++){
                    dp[i][j]=min(dp[i-1][j],dp[i][j-1])+matrix[i][j];
                }
            }
            return dp[n-1][m-1];
        }
    };
    
  • 相关阅读:
    Nginx设置支持Https
    windows git bash bash: xxx: command not found
    无法打开arxiv.org的解决办法
    divmod的妙用
    py2 to py3
    keras模型可视化
    python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
    ubuntu “快捷方式”
    tf.keras遇见的坑:Output tensors to a Model must be the output of a TensorFlow `Layer`
    ImportError: Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.
  • 原文地址:https://www.cnblogs.com/Jorgensen/p/14565307.html
Copyright © 2011-2022 走看看