本文已参与「新人创作礼」活动,一起开启掘金创作之路
与对应负数同时存在的最大正整数
2441. 与对应负数同时存在的最大正整数 - 力扣(LeetCode)
我们根据提示,我们可以发现,数组的长度不是很长,那我们就可以直接利用爆破的方法来解决。
我们直接让数组排序一下,排序好之后,我们从后面开始,看看数组里面有没有这个数的负数,如果有就直接返回,如果没有的话就找下一个,就这样一直找下去,如果最后没有找到的话就返回-1.
代码
public int findMaxK(int[] nums) {
Arrays.sort(nums);
for(int i = nums.length - 1;i >= 0;i--){
if(find(nums , -nums[i])){
return nums[i];
}
}
return -1;
}
public boolean find(int[] nums , int num){
for(int i = 0;i<nums.length;i++){
if(nums[i] == num){
return true;
}
}
return false;
}
两个方法各司其职,上面的方法用来确定最大的值是什么,下面的方法来看看这个最大的值有没有负数在这个数组里面
反转之后不同整数的数目
2442. 反转之后不同整数的数目 - 力扣(LeetCode)
我们可以知道这个是要去重的,那我们的数据结构里面set就是用来去重的,我们可以利用这个来解决。我们可以直接创建一个Hashset,然后再创建一个函数是可以返回一个数逆置之后的样子的。
代码
public int countDistinctIntegers(int[] nums) {
HashSet<Integer> hashSet = new HashSet<>();
for(int i = 0;i<nums.length;i++){
int cur = reverse(nums[i]);
hashSet.add(cur);
hashSet.add(nums[i]);
}
return hashSet.size();
}
public int reverse(int num){
int ans = 0;
while(num != 0){
ans = ans * 10 + num % 10;
num /= 10;
}
return ans;
}
上面有两个方法,前者是遍历数组,把每个数和逆置之后的放到hashset里面,第二个函数就是用来逆置数字的。
反转之后的数字和
这个其实和上面的那个题目差不多,就是创建一个反转方法,然后一个一个试就可以了。
代码
public boolean sumOfNumberAndReverse(int num) {
for(int i = 0;i<= num;i++){
if(i + reverse(i) == num){
return true;
}
}
return false;
}
public int reverse(int num){
int ans = 0;
while(num != 0){
ans = ans * 10 + num % 10;
num /= 10;
}
return ans;
}
统计定界子数组的数目
2444. 统计定界子数组的数目 - 力扣(LeetCode)
我们先创建一个循环,然后以轮到的数字为最后一个数字,然后判断前面有多少个符合的。如果有符合的就相加。如果遇到比maxK大的比minK小的,那就说明之前的都不会符合了,那我们就要从不符合的数字的下一位开始解决。
代码
public static long countSubarrays(int[] nums, int minK, int maxK) {
long ans = 0;
int max = -1;
int min = -1;
int begin = -1;
for(int i = 0;i<nums.length;i++){
if(nums[i] == maxK){
max = i;
}
if(nums[i] == minK){
min = i;
}
if(nums[i] < minK || nums[i] > maxK){
begin = i;
}
ans += Math.max(Math.min(min , max) - begin , 0);
}
return ans;
}
我们的begin就代表着这个数组是从哪个位置开始的。我们的i表示的是结束的位置。
我们用max和min来表示位置。