1.Fizz Buzz stringstream使用吧int转成string
题目描述:
写一个程序,输出从 1 到 n 数字的字符串表示。
1. 如果 n 是3的倍数,输出“Fizz”;
2. 如果 n 是5的倍数,输出“Buzz”;
3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。
示例:
n = 15,
返回:
[
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
"FizzBuzz"
]
class Solution {
public:
vector<string> fizzBuzz(int n) {
vector<string> ans;
for(int i = 1;i<=n;++i){
if(i%3==0&&i%5!=0) ans.push_back("Fizz");
else if(i%5 == 0&&i%3!=0) ans.push_back("Buzz");
else if(i%5 == 0&&i%3==0) ans.push_back("FizzBuzz");
else {
stringstream ss;
string str;
ss<<i;
ss>>str;
ans.push_back(str);
}
}
return ans;
}
};
2.打乱数组
题目描述:
打乱一个没有重复元素的数组。
示例:
// 以数字集合 1, 2 和 3 初始化数组。
int[] nums = {1,2,3};
Solution solution = new Solution(nums);
// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。
solution.shuffle();
// 重设数组到它的初始状态[1,2,3]。
solution.reset();
// 随机返回数组[1,2,3]打乱后的结果。
solution.shuffle();
class Solution {
public:
vector<int> zyw;
vector<int> shuf;
int N;
Solution(vector<int>& nums) {
zyw = nums;
shuf = nums;
N = nums.size();
}
/** Resets the array to its original configuration and return it. */
vector<int> reset() {
return zyw;
}
/** Returns a random shuffling of the array. */
vector<int> shuffle() {
for(int i = 0;i<N;++i){
swap(shuf[rand()%(N-i)+i],shuf[i]);
}
return shuf;
}
};
/**
* Your Solution object will be instantiated and called as such:
* Solution* obj = new Solution(nums);
* vector<int> param_1 = obj->reset();
* vector<int> param_2 = obj->shuffle();
*/
3.有序矩阵中第k小元素
题目描述:
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。
请注意,它是排序后的第k小元素,而不是第k个元素。
示例:
matrix = [
[ 1, 5, 9],
[10, 11, 13],
[12, 13, 15]
],
k = 8,
返回 13。
说明:
你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2 。
class Solution {
public:
int kthSmallest(vector<vector<int>>& matrix, int k) {
int lo = matrix[0][0],hi = matrix.back().back();
while(lo<hi){
int count = 0;
int mid = lo+(hi-lo>>1);
for(int i = 0;i<matrix.size();++i){
count += binarySearch(matrix[i],mid);
}
if(k<=count) hi = mid;
else lo = mid+1;
}
return lo;
}
int binarySearch(vector<int>& row,int target){
int lo = 0,hi = row.size();
while(lo<hi){
int mid = lo + (hi - lo>>1);
if(row[mid]<=target) lo = mid+1;
else hi = mid;
}
return lo;
}
};