LC 67. Add Binary

本文介绍了一种解决二进制字符串相加问题的方法。通过使用C++实现了一个类Solution,其中包含一个成员函数addBinary,该函数接受两个二进制字符串作为参数,并返回它们的和(同样为二进制字符串)。文章还详细解释了如何逐位计算二进制和,包括处理进位的过程。

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".


题目不难是一道easy题目,注意不要直接进行string 加法即可,要用一个数列记录每一位的值。

这里主要是总结一下做法,先上代码。

class Solution {
public:
    string addBinary(string a, string b) {
        vector<char> ans;
        int taila = a.size() - 1, tailb = b.size() - 1;
        int last = 0, t_sum;
        while (taila >= 0 || tailb >= 0) {
            t_sum = last;
            if(taila >= 0) t_sum += a[taila--] - '0';
            if (tailb >=0) t_sum += b[tailb--] - '0';
            last = t_sum >> 1;
            ans.push_back(t_sum % 2 + '0');
        }
        if (last == 1) ans.push_back('1');
        return string(ans.rbegin(),ans.rend());
    }
};

要让代码简洁一些,首先注意的事可以在语句中使用 taila--这种

第二个是循环条件,如果同时做,然后分开做,可以用同一个循环体在循环体的头部用||,然后在循环体内部再判断。

“// 导入所需库 var oeel = require('users/OEEL/lib:loadAll'); var interpolating = require('users/3157311411/tools:SeriesProcessing'); // 定义研究区域和样本点 var roi = ee.FeatureCollection('projects/ee-yixuwei610/assets/hubei'); var points = ee.FeatureCollection("projects/ee-yixuwei610/assets/2024HBsamples"); var roiGeometry = roi.geometry(); // 定义Landsat 8预处理函数 function preprocessLandsat(image) { // 辐射定标 var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2); var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0); // 计算NDVI var ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI'); return image.addBands(opticalBands, null, true) .addBands(thermalBands, null, true) .addBands(ndvi) .copyProperties(image, ['system:time_start']); } // 获取并预处理Landsat 8数据 var landsatCol = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') .filterDate('2024-01-01', '2024-12-01') .filterBounds(roiGeometry) .map(preprocessLandsat) .select('NDVI'); print('原始NDVI影像集', landsatCol); // 步骤1:应用SG滤波(返回ImageCollection) var sgFiltered = oeel.ImageCollection.SavatskyGolayFilter( landsatCol.select(['NDVI']), // 明确选择波段 ee.Filter.maxDifference(1000*3600*24*30, 'system:time_start'), // 时间窗口 function(img1, img2) { var timeDiff = ee.Number(img1.get('system:time_start')) .subtract(ee.Number(img2.get('system:time_start'))); return ee.Image.constant(timeDiff.abs()); // 时间差绝对值 }, 3, // 多项式阶数 ['NDVI'] // 目标波段 ); // 步骤2:提取滤波结果并重命名(关键修正) var processed = sgFiltered.map(function(image) { return image .select(['d_0_NDVI']) // 选择SG滤波生成的波段 .rename('NDVI'); // 重命名为原始波段名 }); print('处理后的影像集', processed); // 提取样本点时间序列值 function extractPointValues(imageCollection) { var ft = ee.FeatureCollection(ee.List([])); var fill = function(img, ini) { var inift = ee.FeatureCollection(ini); var date = img.date().format('YYYY-MM-dd'); var ft2 = img.reduceRegions({ collection: points, reducer: ee.Reducer.mean(), scale: 30 }).map(function(f) { return f.set('date', date); }); return inift.merge(ft2); }; return ee.FeatureCollection(imageCollection.iterate(fill, ft)); } // 获取原始和滤波后的时间序列数据 var rawSeries = extractPointValues(landsatCol); var sgSeries = extractPointValues(sgFiltered); // 合并两个时间序列数据集 var combinedSeries = rawSeries.map(function(feat) { var date = feat.get('date'); var rawNDVI = feat.get('NDVI'); // 查找同一天同一地点的滤波值 var sgFeat = sgSeries.filter( ee.Filter.and( ee.Filter.eq('system:index', feat.get('system:index')), ee.Filter.eq('date', date) ) ).first(); var sgNDVI = sgFeat.get('d_0_NDVI'); // SG滤波后的值 return feat.set({ 'NDVI_raw': rawNDVI, 'NDVI_sg': sgNDVI }); }); // 导出结果到Google Drive Export.table.toDrive({ collection: combinedSeries, description: 'NDVI_SG_Results', fileFormat: 'CSV', selectors: ['system:index', 'name', 'date', 'NDVI_raw', 'NDVI_sg'] }); // 为每个样本点绘制时序图 var pointIds = points.aggregate_array('system:index'); pointIds.evaluate(function(ids) { ids.forEach(function(id) { var pointData = combinedSeries.filter(ee.Filter.eq('system:index', id)); // 绘制时序对比图 var chart = ui.Chart.feature.byFeature({ features: pointData, xProperty: 'date', yProperties: ['NDVI_raw', 'NDVI_sg'] }).setOptions({ title: '点位 ' + id + ' NDVI时序:原始 vs SG滤波', hAxis: {title: '日期'}, vAxis: {title: 'NDVI值'}, lineWidth: 1, pointSize: 2, series: { 0: {color: 'blue', lineWidth: 1, pointSize: 2}, // 原始数据 1: {color: 'red', lineWidth: 2, pointSize: 0} // SG滤波数据 } }); print(chart); }); }); // 添加底图 Map.addLayer(roiGeometry, {color: 'FF0000'}, '湖北'); Map.addLayer(points, {color: '0000FF'}, '农田点'); Map.centerObject(roiGeometry, 8); ”报错“ImageCollection (Error) Join.apply: Join condition must be a binary filter or a combination of binary filters”
09-17
基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值