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呢!!我真是个大蠢货
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是调用拷贝构造函数(一气呵成),构造插入元素的时候已经赋值;inset是先构造一个元素,再调用重载运算符号,进行赋值
当然push_back也是属于先构造元素,然后调用重载运算符进行赋值,不太行
哈希表
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]; } };
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; } };