数组
常用STL和遍历
//1.常用STL
nums.size();//返回数组元素数量
nums.begin();
nums.end();
sort(A.begin(), A.end()); // 快速排序
//2.遍历
int size = nums.size();
for(int i = 0; i < size; i++){}
二分查找
int left = 0;
int right = nums.size() - 1; // 定义target在左闭右闭的区间里,[left, right]
while (left <= right) { // 当left==right,区间[left, right]依然有效,所以用 <=
int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2
if (nums[middle] > target) {
right = middle - 1; // target 在左区间,所以[left, middle - 1]
} else if (nums[middle] < target) {
left = middle + 1; // target 在右区间,所以[middle + 1, right]
} else { // nums[middle] == target
return middle; // 数组中找到目标值,直接返回下标
}
双指针
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
滑动窗口
while (sum >= s) {
subLength = (j - i + 1); // 取子序列的长度
result = result < subLength ? result : subLength;
sum -= nums[i++]; // 这里体现出滑动窗口的精髓之处,不断变更i(子序列的起始位置)
}
链表
定义与初始化
//1.单链表定义
struct ListNode {
int val; // 节点上存储的元素
ListNode *next; // 指向下一个节点的指针
ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数
};
//2.初始化节点(常用于初始化虚拟节点)
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
删除节点
//3.删除节点
ListNode* tmp = head;
head = head->next;
delete tmp;//C++需要手动删除内存
标签:ListNode,target,nums,int,笔记,middle,算法,节点
From: https://www.cnblogs.com/filosefer/p/17679259.html