开宗明义:本系列基于牛客网剑指offer,刷题小白,一天两道我快乐!旨在理解和交流,重在记录,望各位大牛指点!
牛客网-剑指offer
文章目录
1、最小的K个数
描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则这个最小的4个数字为1,2,3,4。
思路:或用堆
测试代码:
#include <vector>
#include <stdio.h>
#include <algorithm>
using namespace std;
//
class Solution {
public:
vector<int> GetLeastNumbers_solution(vector<int> input, int k) {
vector<int> res;
if (input.size() < k)
return res;
//
sort(input.begin(), input.end());
//
for (int i = 0; i < k; i++) {
res.push_back(res[i]);
}
return res;
}
};
2、连续子数组的最大和
描述:给一个数组,返回它的最大连续子序列的和。
思路:动态规划。
测试代码1:
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
if (array.empty())
return 0;
int sum = array[0]; 记录当前所有子数组的和的最大值
int temp = array[0]; //注意初始值 不能设为0 防止只有负数
for (int i = 1; i < array.size(); i++) //从1开始 因为0的情况在初始化时完成了
{
if (temp < 0)
temp = array[i];
else
temp = temp + array[i];
//
if (temp > sum)
sum = temp;
else
sum = sum;
//tempsum = (tempsum < 0) ? array[i] : tempsum + array[i];
//sum = (tempsum > sum) ? tempsum : sum;
}
return sum;
}
};