c++:vector的相关oj题(136. 只出现一次的数字、118. 杨辉三角、26. 删除有序数组中的重复项、JZ39 数组中出现次数超过一半的数字)

1. 136. 只出现一次的数字

传送门

题目详情

在这里插入图片描述

代码(直接来异或)

class Solution {
   
public:
    int singleNumber(vector<int>& nums) {
   
        //根据:某个元素只出现一次   直接来异或
        int ret=0;
        for(auto e:nums)
        {
   
            ret=ret^e;
        }
        return ret;
    }
};

思路

  1. 异或运算的性质:异或运算(^)具有以下性质**(相同为0,相异为1)**
    • 任何数和0做异或运算,结果仍然是原来的数:a ^ 0 = a
    • 任何数和自身做异或运算,结果为0:a ^ a = 0
    • 异或运算满足交换律和结合律:a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b
  2. 利用异或运算的性质:如果一个数出现两次,那么两次出现的数异或后结果为0;如果一个数只出现一次,那么异或后结果为该数本身。
  3. 利用上述性质,遍历nums中的所有元素,并进行异或运算,最终得到的结果就是只出现一次的元素。
    在这里插入图片描述

2. 118. 杨辉三角

传送门

题目详情

在这里插入图片描述

代码1

class Solution {
   
public:
    vector<vector<int>> generate(int numRows) {
   
        vector<vector<int>> vv;
        vv.resize(numRows);//先给好numRows个元素,即vv里能存vector<int>
        for(int i=0;i<numRows;i++)//对一行进行处理
        {
   
            vv[i].resize(i+1);//每一行里再开好对应的大小
            vv[i].front()=vv[i].back()=1;//最左最右都是1
        }

        for(int i=
评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是Nero哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值