LeetCode编程题总结
程序员文章站
2022-06-10 22:27:01
...
解题思路:
判断数组中各个数字元素的位数是奇数还是偶数 由于题中已给出数字的取值范围 那么我们直接判断数字在哪个区间 及数字的大小即可判断出该数字的位数是奇数还是偶数
class Solution {
public int findNumbers(int[] nums) {
int count = 0;
for(int i=0;i<nums.length;i++){
if((nums[i]>=10&&nums[i]<100)||(nums[i]>=1000&&nums[i]<10000))
count++;
}
return count;
}
}
解题思路:
该题运用到 滑窗
我们使用线性循环计算n个项中前k个元素的总和,并将总和存储在变量window_sum中。
然后,我们将在阵列上线性滑动直至达到最终并同时追踪最大和。
要获得k个元素块的当前总和,只需从前一个块中减去第一个元素并添加当前块的最后一个元素即可。 下面的表示将清楚说明窗口如何在阵列上滑动。
该算法展示了如何将嵌套for循环在少数问题中转换为单个for循环,从而减少了时间的复杂性。
class Solution {
public int minSubArrayLen(int s, int[] nums) {
int len=0;
int i = 0;
int sum = 0;
for(int j=0;j<nums.length;j++){
sum+=nums[j];
while(sum>=s){
len=len==0?(j-i+1):Math.min(len,j-i+1);
sum-=nums[i];
i++;
}
}
return len;
}
}
解题思路:
同样是使用set将其中一个数组进行去重,对另一个数组进行遍历,将满足条件的元素覆盖进原数组,同时使用一个count变量记录符合题意的元素的个数,最后在不创建输出临时数组的情况下,输出满足条件的数组部分即可。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int count = 0;
unordered_set<int> set(nums1.begin(), nums1.end());
for(int num : nums2){
if(set.erase(num)){ //判断是否存在并将其在set中删除
nums2[count] = num;
count++;
}
}
return vector<int>(nums2.begin(), nums2.begin() + count);
}
};
解题思路:
转化成二进制字符串之后,所有的1若存在最后一位均需要被减去,需要一次操作,而每次÷2都需要进行一次右移,也是一次操作
class Solution:
def numberOfSteps (self, num: int) -> int:
# 转化成二进制字符串
bin_str = list(bin(num)[2:])
return len(bin_str) - 1 + bin_str.count('1')
解题思路:
数组中数据各位数字连成 连加即可
class Solution {
public int subtractProductAndSum(int n) {
int muti = 1;
int sum = 0;
while(n!=0){
muti *=n%10;
sum +=n%10;
n/=10;
}
return muti-sum;
}
}
解题思路:
按偶数顺序遍历数组
判断偶数位上的元素的奇偶性
重新赋值调换位置
class Solution {
public int[] sortArrayByParityII(int[] A) {
int j = 1;
for (int i = 0; i < A.length - 1; i = i + 2) {
if ((A[i] & 1) != 0) {
while ((A[j] & 1) != 0) {
j = j + 2;
}
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
}
return A;
}
}
上一篇: 6_7日
下一篇: 3无重复字符的最长子串