C++每日刷题day2025.7.13
思路:这个是迷宫的变种,我们判断条件是当往与当前方向不同的其他几个方向遍历的时候是需要将这个方向进行改变的,最主要的是先右再下再左再上这种。
class Solution {const int change[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {if (matrix.size() == 0 || matrix[0].size() == 0) {return {};}int rows = matrix.size();int cols = matrix[0].size();int total = rows*cols;vector<vector<bool>> visited(rows, vector<bool>(cols));vector<int> ret(total);int row = 0;int col = 0;int directindex = 0;for (int i = 0; i < total; ++i){ret[i] = matrix[row][col];visited[row][col] = true;int nextrow = row + change[directindex][0];int nextcol = col + change[directindex][1];if (nextrow < 0 || nextrow >= rows || nextcol <0||nextcol>=cols || visited[nextrow][nextcol]){directindex = (directindex + 1) %4;}row += change[directindex][0];col += change[directindex][1];}return ret;}
};
滑动窗口+哈希表,右指针遍历碰到hash值大于1的时候就将左指针往右走。
class Solution {
public:int lengthOfLongestSubstring(string s) {int hash[128] = {0};int right = 0;int left = 0;int ret = 0;while (right < s.size()){hash[s[right]]++;while(hash[s[right]] > 1){hash[s[left++]]--;}ret = max(ret, right - left + 1);right ++;}return ret;}
};
斐波那契数列的判断,我们只需要利用abc这三个数滚动构造斐波那契数列,让当前输入的n这个数位于bc之间,到b或者到c的距离哪个小就返回哪个。
#include <iostream>
using namespace std;int main() {int a = 1;int b = 1;int c = 1;int ret = 0;int n;cin >> n;while (n > c){a = b;b = c;c = a + b;}ret = min(abs(c-n), abs(b-n));cout << ret;
}