九日集训day4【刷题】【九日集训】
前言
今天是第四天啦,加油快过一半了哈哈。
这两天被深搜广搜困扰,ε=(´ο`*)))唉。
1470. 重新排列数组
class Solution {public: vector<int> shuffle(vector<int>& nums, int n) { //再开一个数组,依次把值放进去即可 vector<int> arr(2*n); int index = 0; for(int i = 0; i < n; i++) { arr[index++] = nums[i]; arr[index++] = nums[n+i]; } return arr; }};
1929. 数组串联
直接在一个循环中赋值2次
class Solution {public: vector<int> getConcatenation(vector<int>& nums) { int n = nums.size(); vector<int> vec(2*n); for(int i = 0; i < n; i++) { vec[i] = nums[i]; vec[i+n] = nums[i]; } return vec; }};
1920. 基于排列构建数组
class Solution {public: vector<int> buildArray(vector<int>& nums) { vector<int> ans(nums.size()); for(int i = 0; i < nums.size(); i++) { ans[i] = nums[nums[i]]; } return ans; }};
1480. 一维数组的动态和
一开始想新开一个数组去做,写两层循环,写着写着意识到,这不就是个斐波那契的变形吗?哈哈,只要nums的值实时修改就好
class Solution {public: vector<int> runningSum(vector<int>& nums) { //类似斐波那契数列,nums[i] = nums[i] + nums[i-1] //nums[0]始终为原来的值 for(int i = 1; i < nums.size(); i++) { nums[i] = nums[i] + nums[i-1]; } return nums; }};
剑指 Offer 58 - II. 左旋转字符串
常规遍历
class Solution {public: string reverseLeftWords(string s, int n) { int len = s.length(); n %= len;//避免n溢出 while(n--) { //把首字符保存起来,剩下的依次往前移 char tmp = s[0]; for(int i = 1; i < len; i++) s[i-1] = s[i]; //把首字符赋值给最后一个字符 s[len-1] = tmp; } return s; }};
字符串首位相接,循环取模
申请空间时需要额外一个存放
‘\0’
char* reverseLeftWords(char* s, int k){ int i; int n = strlen(s); char *ret = (char *)malloc( (n + 1) * sizeof(char) ); for(i = 0; i < n; ++i) { ret[i] = s[(i + k) % n]; } ret[n] = '\0'; return ret;}
局部翻转+整体翻转
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; }};
1108. IP 地址无效化
class Solution {public: string defangIPaddr(string address) { string s = ""; for(int i = 0; i < address.length(); i++) { if(address[i] == '.') s += "[.]"; else s += address[i]; } return s; }};
剑指 Offer 05. 替换空格
class Solution {public: string replaceSpace(string s) { string s2 = ""; for(int i = 0; i < s.length(); i++) { if(s[i] == ' ') s2 += "%20"; else s2 += s[i]; } return s2; }};