每日算法练习(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;

}

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

相关推荐
贾斯汀玛尔斯8 小时前
每天学一个算法--LSM-Tree(Log-Structured Merge Tree)
java·算法·lsm-tree
浅念-12 小时前
刷穿LeetCode:BFS 解决 Flood Fill 算法
数据结构·c++·算法·leetcode·职场和发展·bfs·宽度优先
做cv的小昊13 小时前
【TJU】研究生应用统计学课程笔记(8)——第四章 线性模型(4.1 一元线性回归分析)
笔记·线性代数·算法·数学建模·回归·线性回归·概率论
贾斯汀玛尔斯13 小时前
每天学一个算法--倒排索引(Inverted Index)
算法·inverted-index
小e说说14 小时前
打破偏科困境:这些学习软件助孩子重燃学习热情
算法
月昤昽14 小时前
autoCAD二次开发 4.正多边形与collection区分
算法·c#·二次开发·autocad二次开发
休息一下接着来14 小时前
C++ 固定容量环形队列实现
c++·算法
im_AMBER15 小时前
手撕hot100之矩阵!看完这篇就AC~
javascript·数据结构·线性代数·算法·leetcode·矩阵
笨笨饿15 小时前
#79_NOP()嵌入式C语言中内联汇编宏的抽象封装模式研究
linux·c语言·网络·驱动开发·算法·硬件工程·个人开发