有做企业网站的吗,黑马it培训班出来现状,服装个性化定制平台,应该选用什么口罩67. 二进制求和
题目描述
67. 二进制求和
给你两个二进制字符串 a 和 b #xff0c;以二进制字符串的形式返回它们的和。 运行代码#xff08;javaC)
class Solution {public String addBinary(String a, String b) {StringBuilder ansnew StringBuilder();int ca0;for(i…67. 二进制求和
题目描述
67. 二进制求和
给你两个二进制字符串 a 和 b 以二进制字符串的形式返回它们的和。 运行代码javaC)
class Solution {public String addBinary(String a, String b) {StringBuilder ansnew StringBuilder();int ca0;for(int ia.length()-1,jb.length()-1;i0||j0;i--,j--){int sumca;sumi0?a.charAt(i)-0:0;sumj0?b.charAt(j)-0:0;ans.append(sum%2);casum/2;}
ans.append(ca1?ca:);
return ans.reverse().toString();}
}
class Solution {
public:string addBinary(string a, string b) {string ans;int ca 0;int i a.length() - 1;int j b.length() - 1;while (i 0 || j 0) {int sum ca;sum (i 0)? a[i] - 0 : 0;sum (j 0)? b[j] - 0 : 0;ans to_string(sum % 2);ca sum / 2;i--;j--;}if (ca 1) ans to_string(ca);reverse(ans.begin(), ans.end());return ans;}
};
代码思路 初始化定义一个字符串 ans 用于存储最终的二进制和结果。定义变量 ca 作为进位标志初始值为 0。定义两个指针 i 和 j分别指向输入字符串 a 和 b 的最后一个字符即从最低位开始进行加法运算。 逐位相加 进入循环条件是 i 0 或者 j 0即只要两个字符串中还有未处理的位就继续循环。计算当前位的和 sum首先将进位标志 ca 加入然后如果 i 指针指向的位置有效即 i 0将字符串 a 中当前位的值转换为数字加入 sum如果 j 指针指向的位置有效即 j 0将字符串 b 中当前位的值转换为数字加入 sum。将 sum 对 2 取余的结果转换为字符串并添加到 ans 中这就是当前位的结果0 或 1。更新进位标志 ca 为 sum 除以 2 的结果。移动指针 i 和 j 分别向左一位。 处理进位循环结束后如果进位标志 ca 为 1说明还有一个进位需要添加到结果中将 ca 转换为字符串并添加到 ans。 反转结果由于是从低位向高位计算所以最后需要将结果字符串 ans 反转得到正确的二进制和。 返回结果返回最终的二进制和字符串 ans。
27. 移除元素
题目描述
27. 移除元素
给你一个数组 nums 和一个值 val你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k要通过此题您需要执行以下操作
更改 nums 数组使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。返回 k。
用户评测
评测机将使用以下代码测试您的解决方案
int[] nums [...]; // 输入数组
int val ...; // 要移除的值
int[] expectedNums [...]; // 长度正确的预期答案。// 它以不等于 val 的值排序。int k removeElement(nums, val); // 调用你的实现assert k expectedNums.length;
sort(nums, 0, k); // 排序 nums 的前 k 个元素
for (int i 0; i actualLength; i) {assert nums[i] expectedNums[i];
}
如果所有的断言都通过你的解决方案将会 通过 运行代码
class Solution {
public:int removeElement(vectorint nums, int val) {for(auto iter nums.begin(); iter ! nums.end();){if(*iter val){iter nums.erase(iter);}else{iter;}}return nums.size();}
};
代码思路 遍历数组 使用迭代器 iter 遍历输入的整数向量 nums。从 nums.begin() 开始一直到 nums.end()。在每次循环中检查当前迭代器指向的元素是否等于给定的值 val。 删除等于给定值的元素 如果当前元素等于 val则调用 nums.erase(iter) 来删除该元素。erase 函数会返回一个指向下一个有效元素的迭代器将其赋值给 iter以便继续遍历。如果当前元素不等于 val则递增迭代器 iter指向下一个元素。 返回结果最后返回 nums 的大小即经过删除操作后剩余元素的数量。
26. 删除有序数组中的重复项
题目描述
26. 删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums 请你 原地 删除重复出现的元素使每个元素 只出现一次 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k 你需要做以下事情确保你的题解可以被通过
更改数组 nums 使 nums 的前 k 个元素包含唯一元素并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。返回 k 。
判题标准:
系统会用下面的代码来测试你的题解:
int[] nums [...]; // 输入数组
int[] expectedNums [...]; // 长度正确的期望答案int k removeDuplicates(nums); // 调用assert k expectedNums.length;
for (int i 0; i k; i) {assert nums[i] expectedNums[i];
}
如果所有断言都通过那么您的题解将被 通过。 运行代码
class Solution {
public:int removeDuplicates(vectorint nums) {
int nnums.size();
if(n0){return 0;
}
int fast1,slow1;
while(fastn){if(nums[fast]!nums[fast-1]){nums[slow]nums[fast];slow;}fast;
}return slow;}
};
代码思路 边界情况处理首先检查输入向量 nums 的大小是否为 0。如果是则直接返回 0表示没有任何元素也没有不重复的元素。 初始化指针定义两个指针 fast 和 slow分别用于快速遍历整个数组和标记不重复元素的位置。初始时将 fast 和 slow 都设置为 1表示从第二个元素开始检查重复情况。 遍历数组 进入 while 循环条件是 fast 小于数组的大小 n。这个循环的目的是通过 fast 指针快速遍历整个数组找到不重复的元素。在每次循环中检查当前 fast 指针指向的元素是否与前一个元素nums[fast - 1]不同。如果不同说明找到了一个不重复的元素将其赋值给 slow 指针指向的位置nums[slow] nums[fast]然后将 slow 指针向后移动一位slow。 移动指针无论当前元素是否重复都将 fast 指针向后移动一位fast继续检查下一个元素。 返回结果循环结束后slow 指针的值表示不重复元素的数量。返回 slow 作为结果它代表了删除重复元素后数组的新长度。