Day_1_代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

二分

题目链接:

704. 二分查找 - 力扣(LeetCode)

个人认为 二分的 精髓就是:在有序的数组中不断排除掉一半非目标元素

class Solution {
public:
    int search(vector& nums, int target) {
        int left = 0;	// 定义左端点
        int right = nums.size() -1 ; // 定义右端点 
        while(left <= right){	
            int middle = (left + right)>>1;
            if(nums[middle]>target){	//当前查找的位置非目标元素且比目标元素大 根据题意,目标只能出现在此位置的左侧
                right = middle - 1;
            }else if(nums[middle]

平常我会这么写?

#include 
#include 
bool cmp(int a,int b){
    return a>1;
        if(arr[midd] > target) right = midd - 1;
        else if (arr[midd] < target) left = midd +1;
        else return midd;
    }
    std::cout<

移除列表元素

题目链接:27. 移除元素 - 力扣(LeetCode)

这么做其实没有移除出vector 是指将全部非val至保存到vector的前端 并返回非val值的个数

第一眼看到题目我想使用左右指针分别找到 val的索引和非val的索引 找到交换 当 左索引大于右索引时 结束 此时左索引为 ans。
尝试了一下 但是没有做出来 报一个 runtime 的错。

class Solution {
public:
    int removeElement(vector& nums, int val) {
        int after = 0;
        int be = 0;
        while(be

下面是我的思路的代码 看不出来问题出现在哪里

    int removeElement(vector& nums, int val) {
        int left = 0;
        int right = nums.size()-1;
        while(left<=right){
            while(nums[right]==val)right--;
            if (right

报错信息:

Line 1034: Char 34: runtime error: addition of unsigned offset to 0x602000000210 overflowed to 0x60200000020c (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:34

为什么会溢出呢?

你可能感兴趣的:(代码随想录训练,c++)