64,075
社区成员
发帖
与我相关
我的任务
分享
1. 学习了指针的概念、如何定义指针、取地址、解引用等
2. 熟悉了vector相关操作
法一:
空间换时间,将数组nums中的前n个元素即x1~xn取出暂存到数组temp中,然后按照规则将重新填入到nums数组中。
class Solution {
public:
vector<int> shuffle(vector<int>& nums, int n) {
//定义temp中的前n个元素为nums中的前n个元素
vector<int> temp(nums.begin(),nums.begin()+n);
for(int i = 0; i < 2 * n; i+=2){
nums[i] = temp[i / 2];
nums[i + 1] = nums[i / 2 + n];
}
return nums;
}
};
法二:
空间换时间,思想与法一类似,实现方法略有不同
class Solution {
public:
vector<int> shuffle(vector<int>& nums, int n) {
vector<int> ret(nums.begin(),nums.end());
for(int i = 0;i < 2*n;i++){
if(i&1){
//如果i为奇数
ret[i] = nums[n + i / 2];
}else{
//如果i为偶数
ret[i] = nums[(i+1) / 2];
}
}
return ret;
}
};
class Solution {
public:
vector<int> getConcatenation(vector<int>& nums) {
int size = nums.size();
for(int i = 0 ; i < size; i++){
nums.push_back(nums[i]);
}
return nums;
}
};
class Solution {
public:
vector<int> buildArray(vector<int>& nums) {
vector<int> ans(nums);
for(int i = 0; i < nums.size(); i++){
ans[i] = nums[nums[i]];
}
return ans;
}
};
法一:
class Solution {
public:
vector<int> runningSum(vector<int>& nums) {
vector<int> ans(nums);
for(int i = 0; i < nums.size(); i++){
ans[i] = nums[i];
if(i){
ans[i] += ans[i - 1];
}
}
return ans;
}
};
法二:
class Solution {
public:
vector<int> runningSum(vector<int>& nums) {
int n = nums.size();
for(int i = 1; i < n;i++){
nums[i] += nums[i-1];
}
return nums;
}
};
方法一:利用数学知识,将字符串进行翻转
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(),s.end());
reverse(s.end()-n,s.end());
reverse(s.begin(),s.end()-n);
return s;
}
};
方法二:利用数学知识,将字符串进行翻转
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(),s.begin()+n);
reverse(s.begin()+n,s.end());
reverse(s.begin(),s.end());
return s;
}
};
方法三:通过空间换时间,申请一个数组,将原数组中的数按要求复制到新数组中
char* reverseLeftWords(char* s, int k){
int i;
int n = strlen(s);
char *ret = (char*)malloc(sizeof(char)*(n+1));
for(int i = 0;i < n; i++){
ret[i] = s[(i + k) % n];
}
ret[n] = '\0';
return ret;
}
方法一: c++遍历字符串进行替换
class Solution {
public:
string defangIPaddr(string address) {
for(int i = 0; i < address.size();i++){
if(address[i] == '.'){
address.replace(i,1,"[.]");
i += 2;
}
}
return address;
}
};
方法二:使用c语言,利用char数组进行替换
char * defangIPaddr(char * address){
char *ret = (char*)malloc(sizeof(char)*1000);
int returnSzie = 0;
for(int i = 0;address[i];i++){
if(address[i] == '.'){
ret[returnSzie++] = '[';
ret[returnSzie++] = '.';
ret[returnSzie++] = ']';
}else{
ret[returnSzie++] = address[i];
}
}
ret[returnSzie] = '\0';
return ret;
}
方法一:使用c++库函数replace
class Solution {
public:
string replaceSpace(string s) {
for(int i = 0;i < s.size(); i++){
if(s[i] == ' '){
s.replace(i,1,"%20");
}
}
return s;
}
};
方法二:使用c语言申请char数组,遍历替换
char* replaceSpace(char* s){
char *ret = malloc( sizeof(char) * 30001 );
int retSize = 0;
for(int i = 0; s[i]; ++i) {
if(s[i] == ' ') {
ret[retSize++] = '%%';
ret[retSize++] = '2';
ret[retSize++] = '0';
}else {
ret[retSize++] = s[i];
}
}
ret[retSize] = '\0';
return ret;
}
C++双层for循环,直接暴力解
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
vector<int> ret;
int n = nums.size();
for(int i = 0;i < n; i++){
int count = 0;
for(int j = 0;j < n; j++){
nums[j] < nums[i] ? count++ : count+=0;
}
ret.push_back(count);
}
return ret;
}
};
class Solution {
public:
vector<int> printNumbers(int n) {
vector<int> ret;
int max = pow(10,n);
for(int i = 1; i < max; i++){
ret.push_back(i);
}
return ret;
}
};
class Solution {
public:
vector<int> createTargetArray(vector<int>& nums, vector<int>& index) {
vector<int> target;
int n = nums.size();
for(int i = 0; i < n; i++){
target.insert(target.begin()+index[i],nums[i]);
}
return target;
}
};
1.了解了如何在LeetCode提交带指针的题目,掌握了需要返回一维数组的题目的相关范式
2.了解到判断奇偶的一种新写法
if(i&1 == 1) 等价于if(i % 2 != 0) ,即表示如果i为奇数
if(I&1 == 0)等价于if(i%2 == 0),即表示如果i为偶数
无
无
无