1. 搜索旋转排序数组
整数数组 nums
按升序排列,数组中的值 互不相同 。
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。
示例 1:
输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4
示例 2:
输入:nums = [4,5,6,7,0,1,2], target = 3
输出:-1
示例 3:
输入:nums = [1], target = 0
输出:-1
提示:
1 <= nums.length <= 5000
-10^4 <= nums[i] <= 10^4
nums 中的每个值都 独一无二
题目数据保证 nums 在预先未知的某个下标上进行了旋转
-10^4 <= target <= 10^4
进阶:你可以设计一个时间复杂度为 O(log n) 的解决方案吗?
出处:
https://edu.csdn.net/practice/23630838
代码:
#include <bits/stdc++.h> using namespace std; class Solution { public: int search(vector<int> &nums, int target) { int lo = 0; int hi = nums.size() - 1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (nums[mid] == target) { return mid; } if (nums[lo] <= nums[mid]) { if (nums[lo] <= target && target < nums[mid]) { hi = mid - 1; } else { lo = mid + 1; } } else { if (nums[mid] < target && target <= nums[hi]) { lo = mid + 1; } else { hi = mid - 1; } } } return -1; } }; int main() { Solution s; vector<int> nums = {4,5,6,7,0,1,2}; cout << s.search(nums, 0) << endl; nums = {4,5,6,7,0,1,2}; cout << s.search(nums, 3) << endl; return 0; }
输出:
4
-1
2. 字符串中出现最多的字母
一个字符串(string)里出现的次数最多的称为幸运字符。例如,在字符串abbccc中,c 出现的次数最多,所以这个幸运字符就是 c 啦!
Input 第一行是测试数据的组数n,接下来的每组测试数据占一行,每行数据不超过1000个字符且非空。 字符串里只含小写字母。
Output 每组数据对应输出一行,包括出现次数最多的字符和该字符出现的次数,中间是一个空格。如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。
Sample Input
2
abbccc
adfadffasdf
Sample Output
c 3 f 4
出处:
https://edu.csdn.net/practice/23630839
代码:
#include <string.h> #include"stdio.h" int main(void) { int n,i, z[26], max, xia; char c[1050], ch; scanf("%d",&n); while(n>0) { n--; scanf("%s", c); for(i=0; i<26; i++) z[i]=0; xia=strlen(c); for(i=0; i<xia; i++) z[c[i]-'a']++; max=z[0]; xia=0; for(i=1; i<=25; i++) if(z[i]>max){ max=z[i]; xia=i; } ch='a'+xia; printf("%c %d\n", ch, max); } return 0; }
输入输出:
2
abbccc
c 3
adfadffasdf
f 4
3. 从指定位置插入字符串
编写程序,输入字符串S1和S2以及插入位置n,在字符串S1中的指定位置n处插入字符串S2。
例如,输入“jiangsu”、“123”和位置3,则输出“ji123angsu”。
出处:
https://edu.csdn.net/practice/23630840
代码:
#include <iostream> #include <string> using namespace std; int main() { string str1; string str2; int pos; do { if ((cin >> str1 >> str2 >> pos) && (pos >= 1)) { str1.insert(pos - 1, str2); cout << str1 << endl; } else { cout << "Invalid Input" << endl; break; } } while (false); return 0; }
输出:
jiangsu
123
3
ji123angsu