每日算法练习(1)

开一个新坑,记录下自己每天的算法练习,希望自己通过1个多月的学习,能够成为算法大神。

下面正式开始新坑。

两个数组的交集

这是牛客上的题,根据题意,我们有多种解法,这题用哈希比较好写。我们可以弄一个bool类型的数组来模拟哈希表。比如让nums1的值放入数组里,然后全为 true。之后,用nums2的值和数组比较,因为有重复的数字,当nums2的值和数组的值相等时,就把这个公共元素放入另一个数组ret,然后让数组里这个值为 false。最后输出ret的值就可以了。

牛客上的代码如下:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums1 int整型vector 
     * @param nums2 int整型vector 
     * @return int整型vector
     */
  
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        bool hash[1010]={0};
        vector<int> ret;
        for(auto ch:nums1)
        {
            hash[ch]=true;
        }
        for(auto ch:nums2)
        {
            if(hash[ch])
            {
                ret.push_back(ch);
                hash[ch]=false;
            }
        }
        return ret;;
    }
};

点击消除

这一题,很像匹配括号那题。所以,我们可以选择用栈的方式。思路如下:假设字符串 abbc 先把a放入栈里面,然后剩下的跟栈顶元素比,如果等于栈顶元素,就把栈顶元素pop出来,不等于就压入栈内,最后栈里面的就是我们需要的结果了。这一道题有个小技巧,因为是字符串,所以可以用string来模拟栈。

牛客的代码如下:

#include <iostream>
using namespace std;
#include <string>
int main() {
    string s,ret;
    cin>>s;
    for(auto& ch:s)
    {
        if(ret.size()&&ch==ret.back())
        {
            ret.pop_back();
        }
        else ret.push_back(ch);
    }
    if(ret.empty()){
        cout<<'0';
    }
    else cout<<ret;
    return 0;

}

最小花费爬楼梯

这题就是一道比较经典的动态规划问题了。

算法思路:我们创建一个dp[]数组表示到i楼的花费。比如 到第3层的花费就是 dp[3]=cost[2]+dp[2]或者是dp[3]=cost[1]+top[1],然后在取最小的值。如此,我们就得到了到n层的最小花费 dp[n]=min(cost[n-1]+dp[n-1],cost[n-2]+dp[n-2])。

牛客代码如下:

#include <iostream>
using namespace std;
int main() {
    int n;
    cin>>n;
    int cost[n];
    int dp[n+1];
    dp[0]=dp[1]=0;
    for(int i=0;i<n;++i) cin>>cost[i];
    for(int i=2;i<=n;++i)
    {
        dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
    }
    cout<<dp[n];
    return 0;

}

今天就分享这三个题吧,我还得再练

相关推荐
IT猿手12 分钟前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解GLSMOP1-GLSMOP9及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·算法·机器学习·matlab·强化学习
阿七想学习17 分钟前
数据结构《排序》
java·数据结构·学习·算法·排序算法
王老师青少年编程24 分钟前
gesp(二级)(12)洛谷:B3955:[GESP202403 二级] 小杨的日字矩阵
c++·算法·矩阵·gesp·csp·信奥赛
Kenneth風车1 小时前
【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)111
算法·机器学习·分类
eternal__day1 小时前
数据结构(哈希表(中)纯概念版)
java·数据结构·算法·哈希算法·推荐算法
APP 肖提莫1 小时前
MyBatis-Plus分页拦截器,源码的重构(重构total总数的计算逻辑)
java·前端·算法
OTWOL1 小时前
两道数组有关的OJ练习题
c语言·开发语言·数据结构·c++·算法
qq_433554542 小时前
C++ 面向对象编程:递增重载
开发语言·c++·算法
带多刺的玫瑰2 小时前
Leecode刷题C语言之切蛋糕的最小总开销①
java·数据结构·算法
巫师不要去魔法部乱说2 小时前
PyCharm专项训练5 最短路径算法
python·算法·pycharm