2021年11月8日 字符串

学了几天C++回来了,重新开始数据结构的内容!

^(异或运算符) 实现交换

交换两个整数的值而不必用第三个参数
a = 9;
b = 11;

a=a^b; 1001^1011=0010
b=b^a; 1011^0010=1001
a=a^b;  0010^1001=1011

a = 11;
b = 9; 

如果有其它类型,那么就在前面加上强制类型转换符就好啦。

比如这样:(char) (s[left] ^ s[right]);

 移除元素

 

思路: 

4.gif

不要想着去前后交换,那样效率很低,直接用fast走完一遍表就可以了。 

大佬的代码: 

int removeElement(int* nums, int numsSize, int val){
    int slow = 0;
    for (int fast = 0; fast < numsSize; fast++) {"last跑完整个过程也就做完了"
        if (nums[fast] != val) {"如果fast的值不是要删除的值,那么就拷贝到前面"
            nums[slow] = nums[fast];
            slow++;"slow前往下一格"
        }
    }
    return slow;"这个时候slow的值就是新数组的长度了"
}

 最大连续1的个数

大佬的代码:相当简洁; 

int findMaxConsecutiveOnes(int* nums, int numsSize){
    int ans = 0;
    int count = 0;
    int slow = 0;
    for (int fast = 0; fast < numsSize; fast++) {"还是一往无前冲"
        if (nums[fast] == 0) {"如果碰到0就更新slow的位置和初始化计数器count"
            slow = fast;
            count = 0;
            continue;
        }
        count++;
        ans = ans > count ? ans : count;
    }
    return ans;
}

杨辉三角|| (进阶版)

 

大佬的做法,原地实现,相当巧妙:

 

 另外一种有趣的做法: 

今天就先写到这吧。 

 

 

 

 

 

 

 

Guess you like

Origin blog.csdn.net/LEewhITe2003/article/details/121206373