LeetCode Java Day18
给你一个整数数组 nums
和一个整数 k
,请你返回数对 (i, j)
的数目,满足 i < j
且 |nums[i] - nums[j]| == k
。
|x|
的值定义为:
- 如果
x >= 0
,那么值为x
。 - 如果
x < 0
,那么值为-x
。
示例 1:
输入:nums = [1,2,2,1], k = 1
输出:4
解释:差的绝对值为 1 的数对为:
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]
示例 2:
输入:nums = [1,3], k = 3
输出:0
解释:没有任何数对差的绝对值为 3 。
示例 3:
输入:nums = [3,2,1,5,4], k = 2
输出:3
解释:差的绝对值为 2 的数对为:
- [3,2,1,5,4]
- [3,2,1,5,4]
- [3,2,1,5,4]
题目倒是人畜无害。。。直接双指针,但是该如何节约时间才是问题
class Solution {
public int countKDifference(int[] nums, int k) {
if(nums.length==1){
return 0;
}
int ant=0;
Arrays.sort(nums);
for (int i = 0; i <nums.length-1 ; i++) {
for (int j = i+1; j <nums.length ; j++) {
if(Math.abs(nums[i]-nums[j])==k){
ant++;
}
if(Math.abs(nums[i]-nums[j])>k)
break;
}
}
return ant;
}
}
用排序后加上大于k的条件提前跳出。也只是8ms变成了7ms
呜呜呜呜。。降不下去。。感觉不能靠提前跳出作为加速点
class Solution {
public int countKDifference(int[] nums, int k) {
if(nums.length==1){
return 0;
}
int ant=0;
int len=nums.length;
Arrays.sort(nums);
int[]temp=new int[nums[len-1]+1];
for (int num:nums) {
temp[num]++;
}
for (int i = 1; i <=nums[len-1]-k ; i++) {
ant+=temp[i]*temp[i+k];
}
return ant;
}
}
给你一个长度为 n
的整数数组 nums
。请你构建一个长度为 2n
的答案数组 ans
,数组下标 从 0 开始计数 ,对于所有 0 <= i < n
的 i
,满足下述所有要求:
ans[i] == nums[i]
ans[i + n] == nums[i]
具体而言,ans
由两个 nums
数组 串联 形成。
返回数组 ans
。
示例 1:
输入:nums = [1,2,1]
输出:[1,2,1,1,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[0],nums[1],nums[2]]
- ans = [1,2,1,1,2,1]
示例 2:
输入:nums = [1,3,2,1]
输出:[1,3,2,1,1,3,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[3],nums[0],nums[1],nums[2],nums[3]]
- ans = [1,3,2,1,1,3,2,1]
class Solution {
public int[] getConcatenation(int[] nums) {
int[]curr=new int[nums.length*2];
for (int i = 0; i < curr.length; i++) {
if(i>=nums.length){
curr[i]=nums[i-nums.length];
}
else curr[i]=nums[i];
}
return curr;
}
}
暴个力先
额,我的评价是,这个题不如用今天才学的c++
class Solution {
public:
vector<int> getConcatenation(vector<int>& nums) {
int len=nums.size();
for (int i = 0; i <len ; ++i) {
nums.push_back(nums[i]);
}
return nums;
}
};
通过 | C++ | 8ms | 12.9MB | ||
---|---|---|---|---|---|
通过 | Java | 1ms | 43.4MB |
意想不到的,暂时对vector扩容不太了解。而且这里是Java之旅力
class Solution {
public int[] getConcatenation(int[] nums) {
int[]curr=new int[nums.length*2];
for (int i = 0; i < nums.length; i++) {
curr[i]=nums[i];
curr[i+nums.length]=nums[i];
}
return curr;
}
}