44算法题目详解
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。class Solution { public: string reverseStr(string s, int k) { int n = s.length(); for (int i = 0; i < n; i += 2 * k) //这段代码和下面注释的代码等效 { reverse(s.begin() + i, s.begin() + min(i + k, n)); } /* if(i+k<=s.length()) { reverse(s.begin() + i, s.begin() + i + k,); } reverse(s.begin() + i, s.begin() + s.length()); } */ return s; } };
注解:其实这道题目不难,只有一点考察就是reverse运用
reverse 包含在#include 头文件下 ,反转[first, last )范围内的顺序.左闭右开 ///////////////////////////////////猜数字 int game(int* guess, int guessSize, int * answer, int answerSize) { int i; int ans = 0; for (i = 0; i < 3; i++) { ans += (guess[i] == answer[i]) ? 1 : 0; //分别取两个数组对应的元素进行判断,如果相等则计数器+1,否则不加 } return ans; } /////////////////拿硬币 int minCount(int *coion, int coinsSize) { int i; int ans = 0; for (i = 0; i < coinsSize; i++) { ans += (coion[i] + 1) / 2; } return ans; }/* 时间换空间练习 在一个由资额桉树1-1000中某些数字组成的数组中,找到出现最多的数字 */ void search(int a[], int len) { int sp[1000] = {0};//开辟一个内存空间 int i = 0; int max = 0; for (i = 0; i < len; i++) { int index = a[i] - 1;//把数字放到对应的下标位置 //把每一个数子的中间结果缓冲下来 sp[index]++; } for (i = 0; i<1000; i++) { if (max < sp[i]) { max = sp[i]; } } for (i = 0; i < 1000; i++) { if (max == sp[i]) { printf("%d ", i + 1); } } } int main() { int array[] = { 1,1,2,3,4,5,6,7,7,7,8,8 }; search(array, sizeof(array)/sizeof(*array)); system("pause"); return 0; }