其中coding题目来源于师兄面试经验
1、链表的结构体+反转链表
本质上就是一个构造函数
struct ListNode{int val_;ListNode* next_;ListNode() : val_(0), next_(NULL) {}ListNode(int x) : val_(x), next_(NULL) {}ListNode(int x, ListNode* next) : val_(x), next_(next) {}
};
反转链表:
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
/*
struct ListNode{int val_;ListNode* next_;ListNode() : val_(0), next_(NULL) {}ListNode(int x) : val_(x), next_(NULL) {}ListNode(int x, ListNode* next) : val_(x), next_(next) {}
};
*/
class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* pre = nullptr;ListNode* cur = head;while(cur) {ListNode* tmp = cur->next;cur->next = pre;pre = cur;cur = tmp;}return pre;}
};
2、实现一个网页类 能够进行前进、后退、跳转操作
#include <iostream>
#include <stack>
#include <string>
using namespace std; // 这里为了方便开发class Web {
public:Web() {};// 访问void Visit(const string &pages) {while (!backed_pages_.empty()) {backed_pages_.pop();}visited_pages_.push(pages);cout << pages << endl;}// 后退void Back() {if (visited_pages_.empty()) {cout << "ingore" << endl;} else {backed_pages_.push(visited_pages_.top());visited_pages_.pop();if (!visited_pages_.empty()) {cout << visited_pages_.top() << endl;} else {cout << "ingore" << endl;visited_pages_.push(backed_pages_.top());backed_pages_.pop();}}}// 前进void Forward() {if (backed_pages_.empty()) {cout << "ingore" << endl;} else {visited_pages_.push(backed_pages_.top());backed_pages_.pop();cout << visited_pages_.top() << endl;}}~Web() {};private:stack<string> visited_pages_; // 记录访问的页面stack<string> backed_pages_; // 记录回退的页面
};int main() {int n;cin >> n;Web web;for (int i = 0; i < n; ++i){string action, page;cin >> action;if (action == "VISIT") {cin >> page;web.Visit(page);} else if (action == "BACK") {web.Back();} else if (action == "FORWARD") {web.Forward();} else {cout << "Invalid Action!" << endl;}}return 0;
}
8
VISIT
www.baidu.com
www.baidu.com
VISIT
www.sougou.com
www.sougou.com
BACK
www.baidu.com
FORWARD
www.sougou.com
3、二维矩阵,由0、1填充,其中1代表陆地,0代表海洋,找出距离陆地最远的那块海洋的位置
对应力扣1162题
你现在手里有一份大小为 n x n
的 网格 grid
,上面的每个 单元格 都用 0
和 1
标记好了。其中 0
代表海洋,1
代表陆地。
请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的,并返回该距离。如果网格上只有陆地或者海洋,请返回 -1
。
我们这里说的距离是「曼哈顿距离」( Manhattan Distance):(x0, y0)
和 (x1, y1)
这两个单元格之间的距离是 |x0 - x1| + |y0 - y1|
。
示例 1:
输入:grid = [[1,0,1],[0,0,0],[1,0,1]] 输出:2 解释: 海洋单元格 (1, 1) 和所有陆地单元格之间的距离都达到最大,最大距离为 2。
class Solution {
public:static constexpr int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};static constexpr int MAX_N = 100 + 5;struct Coordinate {int x, y, step;};int n, m;vector<vector<int>> a;bool vis[MAX_N][MAX_N];int findNearestLand(int x, int y) {memset(vis, 0, sizeof vis);queue <Coordinate> q;q.push({x, y, 0});vis[x][y] = 1;while (!q.empty()) {auto f = q.front(); q.pop();for (int i = 0; i < 4; ++i) {int nx = f.x + dx[i], ny = f.y + dy[i];if (!(nx >= 0 && nx <= n - 1 && ny >= 0 && ny <= m - 1)) {continue;}if (!vis[nx][ny]) {q.push({nx, ny, f.step + 1});vis[nx][ny] = 1;if (a[nx][ny]) {return f.step + 1;}}}}return -1;}int maxDistance(vector<vector<int>>& grid) {this->n = grid.size();this->m = grid.at(0).size();a = grid;int ans = -1;for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (!a[i][j]) {ans = max(ans, findNearestLand(i, j));}}}return ans;}
};
这道题目先贴这里,最近还没看图论,
4、现有一个能产生随机数字1-5的函数,请写出一个能产生随机数字1-7的函数
#include<iostream>
#include<ctime>
#include<cstdlib>int GenerateRandom5() {return (rand() % 5) + 1;
}int GenerateRandom7() {int x = ~(1<<31);while(x > 21) {x = 5 * (GenerateRandom5() - 1) + GenerateRandom5();}return x % 7 + 1;
}int main() {srand(static_cast<unsigned int>(time(0))); // 生成并输出一个1到7之间的随机数 int randomNumber = GenerateRandom7(); std::cout << "Random number between 1 and 7: " << randomNumber << std::endl; return 0;
}