704. 二分查找
题目链接:https://leetcode.cn/problems/binary-search/
前置条件:数值有序
效果:可以将 时间复杂度 优化 为 log(n)
思路:
target (可能 存在 的 )元素 等于 mid 位 元素 时 , 返回 当前 下标
target 元素 相对于 mid 位 元素 小 时 ,选择 左侧 区域 继续 查找
target 元素 相对于 mid 位 元素 大 时 ,选择 右侧 区域 继续 查找
细节 :
可以 从 3 , 2 , 1 个 /(奇数个 / 偶数个 ) 元素 的 节点 考虑 最终情况
代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int length ;
int left;
int right;
int mid;
length = end(nums) - begin(nums);
left = 0;
right = length - 1;
mid = ( left + right ) / 2;
while(left<=right)
{
if(nums[mid] == target)
{
return mid;
}
else if(target < nums[mid])
{
right = ( mid - 1 );
mid = (left + right ) / 2;
}
else if(target > nums[mid])
{
left = ( mid + 1 );
mid = (left + right ) / 2;
}
}
return -1;
}
};
27. 移除元素
题目链接:https://leetcode.cn/problems/remove-element/
对 “最新 处理 位置 ” 和 “有效 储存 最 末尾 的 位置 ” 分别 分配 一个 指针 进行 处理 / 记录
注意 各指针 在 xx 时刻 / 时段 所 指 的 位置
实际 使用 中 不建议 将 指针 初始化 为 -1 , “这样 的 处理 更 容易 产生 溢出 (是 可以 污染 其它 数据 / 搞崩 程序 服务 的 (如果 没 在 测试阶段 检测 出来 的 话 ) )”
注意 合理 地 使用 判断 条件 减少 访存 次数
注意 不要 把 剩余 的 有效 元素 数量 和 已经 删除 的 元素 的 数量 搞混
代码:
class Solution {标签:27,nums,704,++,元素,ptr2,mid,int,移除 From: https://www.cnblogs.com/brinisky/p/18261355
public:
int removeElement(vector<int>& nums, int val) {
//为 前进 方向 的 前部读取侧 分配 一个 指针 (记录 地址 ) , 为 后边 的 有效 内容 的 接受 序列 分配 一个 指针
int length ;
int ptr2;
int ptr1;
int k = 0 ; //记录 符合 val 值 元素 的 个数
//注意 不要 搞 反 了 k 的 意义 , k 在 这里 表示 的 是 保留 下 的 有效 元素 数 , 而不是 “ ‘符合 条件’ 被 去除 的 数(元素) 的 数量”
length = end(nums) - begin(nums) ;
ptr2 = 0 ;
ptr1 = -1 ;
for(; ptr2 < length ; )
{
//cout<<"ptr2 : "<<ptr2<<" nums[ptr2] : "<<nums[ptr2]<<endl;
if(nums[ptr2] == val )
{
ptr2++;
}
else if(nums[ptr2] != val)
{
if(ptr2 == ptr1 + 1 )
{
ptr1++;
ptr2++;
k++;
}
else
{
ptr1++;
nums[ptr1] = nums[ptr2];
ptr2++;
k++;
}
}
}
return k ;
}
};