力扣
一.与对应负数同时存在的最大正整数
1.原题链接:力扣
2.解题思路:
双重循环,循环条件是该元素大于0并且在数组中存在其对应的负数
3.参考代码:
class Solution {
public:
int findMaxK(vector<int>& nums) {
int n = nums.size();
int ans = -1;
int i;
for(int i = 0; i < n; i ++){
for(int j = 0; j < n; j++){
if(nums[i] > 0 && nums[i] == nums[j] * (-1))ans = max(ans, nums[i]);
}
}
return ans;
}
};
二.反转之后不同整数的数目
1.原题链接:力扣
2.解题思路:
运用set的性质,只会保存不同的元素,最后返回其长度即可
3.参考代码:
class Solution {
public:
int reverse(int x) {
int tmp = 0;
while(x){
tmp = tmp * 10 + x % 10;
x /= 10;
}
return tmp;
}
int countDistinctIntegers(vector<int>& nums) {
set<int>se;
int n = nums.size();
for(int i = 0; i < n; i++){
se.insert(nums[i]);
}
for(int i = 0; i < n; i++){
se.insert(reverse(nums[i]));
}
return (int)se.size();
}
};
三.反转之后的数字和
1.原题链接:力扣
2.解题思路:
if(i + reverse(i) == num)则return true;否则返回false
3.参考代码:
class Solution {
public:
int reverse(int x) {
int tmp = 0;
while(x){
tmp = tmp * 10 + x % 10;
x /= 10;
}
return tmp;
}
bool sumOfNumberAndReverse(int num) {
if(num == 0)return true;
for(int i = 0; i < num; i++){
if(i + reverse(i) == num)return true;
}
return false;
}
};
Acwing
一.数对
1.原题链接:4704. 数对 - AcWing题库
2.解题思路:
双重循环,若满足条件,则ans++,由于j > i但(2,1) 和(1,2) 视为两个不同的数对,所以最后返回ans * 2即可
3.参考代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
int n, d;
cin >> n >> d;
int ans = 0;
vector<int>a(n);
for(int i = 0; i < n; i++)cin >> a[i];
for(int i = 0; i < n; i ++){
for(int j = i + 1; j < n; j++){
if(abs (a[i] - a[j]) <= d)ans++;
}
}
cout << ans * 2<< endl;
return 0;
}
二.矩阵
1.原题链接:4705. 矩阵 - AcWing题库
2.解题思路:
因为要判断是否重复,可以想到set这种数据结构,但是set存不了矩阵,就把矩阵的变换转变为字符串的变换
3.参考代码:
#include <iostream>
#include <cstring>
#include <string>
#include <unordered_set>
using namespace std;
int n;
unordered_set<string> set;
bool check(string str)
{
if (set.count(str)) return false;
string s[4];
s[0] = str;
for (int i = 1; i < 4; i++)
{
s[i].resize(4);
s[i][0] = s[i - 1][2], s[i][1] = s[i - 1][0];
s[i][2] = s[i - 1][3], s[i][3] = s[i - 1][1];
if (set.count(s[i])) return false;
}
set.insert(s[0]), set.insert(s[1]);
set.insert(s[2]), set.insert(s[3]);
return true;
}
int main(void)
{
cin >> n;
int cnt = 0;
for (int i = 0; i < n; i++)
{
string a, b, c;
cin >> a >> b;
if (check(a + b)) cnt++;
if (i != n - 1) cin >> c;
}
cout << cnt << endl;
return 0;
}