剑指29.顺时针打印矩阵 31 栈的压入,弹出序列 03 数组中的重复数字 53缺失的数字 04二维数组中的查找

cpp 复制代码
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) { 
        if (matrix.size() == 0 || matrix[0].size() == 0) return {};//必须要写到最前面,因为right和bottom-1就是负数了
        vector<int> result;
        int left=0,right=matrix[0].size()-1;//从一行的第一个lleft到最后一个right
        int top=0,bottom=matrix.size()-1;//从一列的最上面到最下面
        int i=0,j=0;
        while(1)
        {
            for(int i=left;i<=right;i++)
            { 
            result.push_back(matrix[top][i]);
            }
            top++;
            if(top>bottom) break;
            for(int j=top;j<=bottom;j++)
            {
                result.push_back(matrix[j][right]);
            }
            right--;
            if(left>right) break;
            for(int i=right;i>=left;i--)
            {
                result.push_back(matrix[bottom][i]);
            }
            bottom--;
            if(top>bottom) break;
            for(int j=bottom;j>=top;j--)
            {
                result.push_back(matrix[j][left]);
            }
            left++;
            if(left>right) break;
        }
        return result;


    }
};

回字形

思路:pushed数组里遍历进栈,遍历时候,先进栈,再判断栈顶是否和poped序列的当前指向的是否一样,一样就pop,直到不一样为止,然后继续遍历进栈。然后再判断栈里面剩余的和poped序列指向的一不一样,一样,就把栈里面的pop,直到栈为空,只要有一个不一样,就return 0,最后栈为空,poped序列也遍历完了,flag=1.

这题用的哈希集合,想着一会就写出来了,但是,算了先贴出脑残代码,尼玛哈希集合的count值只能是找不到(0),找得到(1),没有其他的取值!!!!!!我说怎么给我return 0呢!!我真是个大蠢货

cpp 复制代码
class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        unordered_set<int> hs;
        for(int i=0;i<nums.size();i++)
        {
            hs.emplace(nums[i]);//比emplace更高效率的插入
            if(hs.count(nums[i])>1) return nums[i];//count只能是0,1
        }
        return 0;
    }
};

稍稍改一下就行了

cpp 复制代码
class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        unordered_set<int> hs;
        for(int i=0;i<nums.size();i++)
        {
            if(hs.count(nums[i])==1) return nums[i];
            hs.emplace(nums[i]);//比emplace更高效率的插入
        }
        return 0;
    }
};

这边记录一下为什么empalce比insert更高效,emplace是调用拷贝构造函数(一气呵成),构造插入元素的时候已经赋值;inset是先构造一个元素,再调用重载运算符号,进行赋值

当然push_back也是属于先构造元素,然后调用重载运算符进行赋值,不太行

哈希表

cpp 复制代码
class Solution {
public:
    int search(vector<int>& nums, int target) {
        unordered_map<int,int>mp;
        for(int i=0;i<nums.size();i++)
        {
            mp[nums[i]]++;
        }
        return mp[target];
    }
};
cpp 复制代码
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int val=nums[0];
        int res=0;
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]!=val++) return val-1;
            if(i==nums.size()-1)
            {
                if(nums[0]==1) return 0;//特殊情况 只有一个元素【1】的时候,缺的是0,不是2
                res=nums[i]+1;
            }
        }
        return res;
    }
};
相关推荐
爪哇学长1 分钟前
双指针算法详解:原理、应用场景及代码示例
java·数据结构·算法
Dola_Pan5 分钟前
C语言:数组转换指针的时机
c语言·开发语言·算法
繁依Fanyi17 分钟前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
烦躁的大鼻嘎33 分钟前
模拟算法实例讲解:从理论到实践的编程之旅
数据结构·c++·算法·leetcode
C++忠实粉丝1 小时前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
用户37791362947551 小时前
【循环神经网络】只会Python,也能让AI写出周杰伦风格的歌词
人工智能·算法
福大大架构师每日一题1 小时前
文心一言 VS 讯飞星火 VS chatgpt (396)-- 算法导论25.2 1题
算法·文心一言
EterNity_TiMe_2 小时前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
机器学习之心2 小时前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds2 小时前
FIFO和LRU算法实现操作系统中主存管理
算法