持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
前言
Hello!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖...已保研。
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
唯有努力💪
知其然 知其所以然!
本文只记录感兴趣的部分
每日一题
题目
给定一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点,如果这些点构成一个 回旋镖 则返回 true 。
回旋镖 定义为一组三个点,这些点 各不相同 且 不在一条直线上 。
示例 1:
输入:points = [[1,1],[2,3],[3,2]]
输出:true
示例 2:
输入:points = [[1,1],[2,2],[3,3]]
输出:false
提示:
- points.length == 3
- points[i].length == 2
- 0 <= xi, yi <= 100
解答
题目挺简单的
判断三点是否共线
利用两条直线的斜率即可(用乘积形式)
class Solution {
public:
bool isBoomerang(vector<vector<int>>& points) {
return !((points[1][1] - points[0][1]) * (points[2][0] - points[0][0]) == (points[2][1] - points[0][1]) * (points[1][0] - points[0][0]));
}
};
题目
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
示例 1:
输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]
示例 2:
输入:head = [5], left = 1, right = 1
输出:[5]
提示:
- 链表中节点数目为 n
- 1 <= n <= 500
- -500 <= Node.val <= 500
- 1 <= left <= right <= n
解答
/**
* 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:
void reverseListNode(ListNode* head) {
ListNode* pre = nullptr;
ListNode* cur = head;
while(cur) {
ListNode* nextNode = cur->next;
cur->next = pre;
pre = cur;
cur = nextNode;
}
}
ListNode* reverseBetween(ListNode* head, int left, int right) {
ListNode* dummyNode = new ListNode(-1);
dummyNode->next = head;
ListNode* pre = dummyNode;
for(int i = 0; i < left - 1; ++i) {
pre = pre->next;
}
ListNode* rightNode = pre;
for(int i = 0; i < right - left + 1; ++i) {
rightNode = rightNode->next;
}
ListNode* leftNode = pre->next;
ListNode* last = rightNode->next;
pre->next = nullptr;
rightNode->next = nullptr;
reverseListNode(leftNode);
// 注意此时 pre后面为rightNode last之前为leftNode
pre->next = rightNode;
leftNode->next = last;
return dummyNode->next;
}
};
借助206题的反转链表
先找出需要反转的链表
断开连接
再反转
再拼接上即可
链表问题需注意细节!
结语
文章仅作为个人学习笔记记录,记录从0到1的一个过程
希望对您有一点点帮助,如有错误欢迎小伙伴指正