class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if (matrix.size() == 0 || matrix[0].size() == 0) return {};//必須要寫到最前面,因?yàn)閞ight和bottom-1就是負(fù)數(shù)了
vector<int> result;
int left=0,right=matrix[0].size()-1;//從一行的第一個(gè)lleft到最后一個(gè)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數(shù)組里遍歷進(jìn)棧,遍歷時(shí)候,先進(jìn)棧,再判斷棧頂是否和poped序列的當(dāng)前指向的是否一樣,一樣就pop,直到不一樣為止,然后繼續(xù)遍歷進(jìn)棧。然后再判斷棧里面剩余的和poped序列指向的一不一樣,一樣,就把棧里面的pop,直到棧為空,只要有一個(gè)不一樣,就return 0,最后棧為空,poped序列也遍歷完了,flag=1.
這題用的哈希集合,想著一會(huì)就寫出來(lái)了,但是,算了先貼出腦殘代碼,尼瑪哈希集合的count值只能是找不到(0),找得到(1),沒(méi)有其他的取值!?。。。?!我說(shuō)怎么給我return 0呢?。∥艺媸莻€(gè)大蠢貨
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;
}
};
稍稍改一下就行了
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是調(diào)用拷貝構(gòu)造函數(shù)(一氣呵成),構(gòu)造插入元素的時(shí)候已經(jīng)賦值;inset是先構(gòu)造一個(gè)元素,再調(diào)用重載運(yùn)算符號(hào),進(jìn)行賦值
當(dāng)然push_back也是屬于先構(gòu)造元素,然后調(diào)用重載運(yùn)算符進(jìn)行賦值,不太行
哈希表
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];
}
};
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-593217.html
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;//特殊情況 只有一個(gè)元素【1】的時(shí)候,缺的是0,不是2
res=nums[i]+1;
}
}
return res;
}
};
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-593217.html
到了這里,關(guān)于劍指29.順時(shí)針打印矩陣 31 棧的壓入,彈出序列 03 數(shù)組中的重復(fù)數(shù)字 53缺失的數(shù)字 04二維數(shù)組中的查找的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!