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
内容概要:本文为《科技类企业品牌传播白皮书》,系统阐述了新闻媒体发稿、自媒体博主种草与短视频矩阵覆盖三大核心传播策略,并结合“传声港”平台的AI工具与资源整合能力,提出适配科技企业的品牌传播解决方案。文章深入分析科技企业传播的特殊性,包括受众圈层化、技术复杂性与传播通俗性的矛盾、产品生命周期影响及2024-2025年传播新趋势,强调从“技术输出”向“价值引领”的战略升级。针对三种传播方式,分别从适用场景、操作流程、效果评估、成本效益、风险防控等方面提供详尽指南,并通过平台AI能力实现资源智能匹配、内容精准投放与全链路效果追踪,最终构建“信任—种草—曝光”三位一体的传播闭环。; 适合人群:科技类企业品牌与市场负责人、公关传播从业者、数字营销管理者及初创科技公司创始人;具备一定品牌传播基础,关注效果可量化与AI工具赋能的专业人士。; 使用场景及目标:①制定科技产品全生命周期的品牌传播策略;②优化媒体发稿、KOL合作与短视频运营的资源配置与ROI;③借助AI平台实现传播内容的精准触达、效果监测与风险控制;④提升品牌在技术可信度、用户信任与市场影响力方面的综合竞争力。; 阅读建议:建议结合传声港平台的实际工具模块(如AI选媒、达人匹配、数据驾驶舱)进行对照阅读,重点关注各阶段的标准化流程与数据指标基准,将理论策略与平台实操深度融合,推动品牌传播从经验驱动转向数据与工具双驱动。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值