13.二叉树子结构判断
1234567891011121314151617181920212223242526/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */class Solution {public: bool isSubStructure(TreeNode* A, Tre...
12.删除链表的倒数第 N 个结点
1234567891011121314151617181920212223242526272829303132333435363738/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */class Solution {public: int getLength(ListNode* head) { int length = 0; while (head) { ...
11.求一个整数的平方根保留两位小数
123456789101112131415161718192021222324#include <bits/stdc++.h>using namespace std;double mySqrt(int n) { if (n == 0) return 0; double left = 0; double right = n; double mid; while (right - left > 0.0001) { // 控制精度 mid = (left + right) / 2.0; if (mid * mid < n) left = mid; else right = mid; } return left;}int main() { int n; cin >> n; double ans = mySqrt(n); cout << fi...
10.反转链表
1234567891011121314class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* prev = nullptr; ListNode* curr = head; while (curr) { ListNode* next = curr->next; curr->next = prev; prev = curr; curr = next; } return prev; }}; https://leetcode.cn/problems/UHnkqh/description/
9.简单二分搜索插入位置
123456789101112131415161718class Solution {public: int searchInsert(vector<int>& nums, int target) { int n = nums.size(); int left = 0, right = n - 1, ans = n; while (left <= right) { int mid = ((right - left)/2) + left; if (target <= nums[mid]) { ans = mid; right = mid - 1; } else { left = mid + 1; } } return an...
8.最长递增子序列
1234567891011121314151617181920class Solution {public: int lengthOfLIS(vector<int>& nums) { int n = (int)nums.size(); if (n == 0) { return 0; } vector<int> dp(n, 0); for (int i = 0; i < n; ++i) { dp[i] = 1; for (int j = 0; j < i; ++j) { if (nums[j] < nums[i]) { dp[i] = max(dp[i], dp[j] + 1); } }...
7.反转二叉树
12345678910111213class Solution {public: TreeNode* invertTree(TreeNode* root) { if (root == nullptr) { return nullptr; } TreeNode* left = invertTree(root->left); TreeNode* right = invertTree(root->right); root->left = right; root->right = left; return root; }}; https://leetcode.cn/problems/invert-binary-tree/
6.岛屿数量
1234567891011121314151617181920212223242526272829class Solution {public: int numIslands(vector<vector<char>>& grid) { int m = grid.size(), n = grid[0].size(); auto dfs = [&](this auto&& dfs, int i, int j) -> void { // 出界,或者不是 '1',就不再往下递归 if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] != '1') { return; } grid[i][j] = '2...
5.最大交替子序列和
12345678910111213class Solution {public: long long maxAlternatingSum(vector<int>& nums) { long long even = nums[0], odd = 0; for (int i = 1; i < nums.size(); i++) { even = max(even, odd + nums[i]); odd = max(odd, even - nums[i]); } return even; }}; https://leetcode.cn/problems/maximum-alternating-subsequence-sum/
4.三数之和
1234567891011121314151617181920212223242526272829class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { ranges::sort(nums); vector<vector<int>> ans; int n = nums.size(); for (int i = 0; i < n - 2; i++) { int x = nums[i]; if (i && x == nums[i - 1]) continue; // 跳过重复数字 if (x + nums[i + 1] + nums[i + 2] > 0) break; // 优化一 if (x + nums[n - 2]...
