目录
6219反转之后的数字和https://leetcode.cn/problems/sum-of-number-and-its-reverse/
6204与对应负数同时存在的最大正整数_排序+双指针https://leetcode.cn/problems/largest-positive-integer-that-exists-with-its-negative/
给你一个 不包含 任何零的整数数组 nums ,找出自身与对应的负数都在数组中存在的最大正整数 k 。 返回正整数 k ,如果不存在这样的整数,返回 -1 。 示例 1: 输入:nums = [-1,2,-3,3] 输出:3 解释:3 是数组中唯一一个满足题目要求的 k 。 示例 2: 输入:nums = [-1,10,6,7,-7,1] 输出:7 解释:数组中存在 1 和 7 对应的负数,7 的值更大。 示例 3: 输入:nums = [-10,8,6,7,-2,-3] 输出:-1 解释:不存在满足题目要求的 k ,返回 -1 。 提示: 1 <= nums.length <= 1000 -1000 <= nums[i] <= 1000 nums[i] != 0 |
-
class Solution { public int findMaxK(int[] nums) { //排序+双指针 Arrays.sort(nums); int m = nums.length; int left = 0; int right = m-1; while(left<right){ if(-nums[left] == nums[right]){ return nums[right]; }else if(nums[right] > Math.abs(nums[left])){ right--; }else{ left++; } } return -1; } }
//哈希表+遍历 class Solution { public int findMaxK(int[] nums) { //居然没有双指针快 Set<Integer> set = new HashSet<>(); for(int num:nums){ set.add(num); } int max = -1; for(int num:nums){ if(num>0 && set.contains(-num)){ max = Math.max(num,max); } } return max; } }
6205.反转之后不同整数的数目https://leetcode.cn/problems/count-number-of-distinct-integers-after-reverse-operations/
给你一个由 正 整数组成的数组 nums 。 你必须取出数组中的每个整数,反转其中每个数位,并将反转后得到的数字添加到数组的末尾。这一操作只针对 nums 中原有的整数执行。 返回结果数组中 不同 整数的数目。 示例 1: 输入:nums = [1,13,10,12,31] 输出:6 解释:反转每个数字后,结果数组是 [1,13,10,12,31,1,31,1,21,13] 。 反转后得到的数字添加到数组的末尾并按斜体加粗表示。注意对于整数 10 ,反转之后会变成 01 ,即 1 。 数组中不同整数的数目为 6(数字 1、10、12、13、21 和 31)。 示例 2: 输入:nums = [2,2,2] 输出:1 解释:反转每个数字后,结果数组是 [2,2,2,2,2,2] 。 数组中不同整数的数目为 1(数字 2)。 提示: 1 <= nums.length <= 105 1 <= nums[i] <= 106 |
// 改写灵神代码:
class Solution {
public int countDistinctIntegers(int[] nums) {
Set<Integer> set = new HashSet<>();
int m = nums.length;
for(int i = 0;i<m;i++){
set.add(nums[i]);
int res = 0;
while(nums[i]>0){
//%10取个位数
// /10去掉个位数
res = res*10+nums[i]%10;
nums[i] /= 10;
}
set.add(res);
}
return set.size();
}
}
6219反转之后的数字和https://leetcode.cn/problems/sum-of-number-and-its-reverse/
给你一个 非负 整数 num 。如果存在某个 非负 整数 k 满足 k + reverse(k) = num ,则返回 true ;否则,返回 false 。 reverse(k) 表示 k 反转每个数位后得到的数字。 示例 1: 输入:num = 443 输出:true 解释:172 + 271 = 443 ,所以返回 true 。 示例 2: 输入:num = 63 输出:false 解释:63 不能表示为非负整数及其反转后数字之和,返回 false 。 示例 3: 输入:num = 181 输出:true 解释:140 + 041 = 181 ,所以返回 true 。注意,反转后的数字可能包含前导零。 提示: 0 <= num <= 105 |
class Solution {
public boolean sumOfNumberAndReverse(int num) {
for(int i = 0;i<num;i++){
//用temp保存i
int temp = i;
int reverse = 0;
while(i>0){
reverse = reverse*10+i%10;
i /= 10;
}
if(temp+reverse == num){
return true;
}
//i要还原回来
i = temp;
}
return false||num==0;
}
}