因为发觉每次贴代码的都是图片,不好直接copy,下面是这十一天来的题目链接及源码
DAY1
力扣题
19.删除链表的倒数第N个节点
题目链接:. - 力扣(LeetCode)
左闭右闭
// 版本一
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1; // 定义target在左闭右闭的区间里,[left, right]
while (left <= right) { // 当left==right,区间[left, right]依然有效,所以用 <=
int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2
if (nums[middle] > target) {
right = middle - 1; // target 在左区间,所以[left, middle - 1]
} else if (nums[middle] < target) {
left = middle + 1; // target 在右区间,所以[middle + 1, right]
} else { // nums[middle] == target
return middle; // 数组中找到目标值,直接返回下标
}
}
// 未找到目标值
return -1;
}
};
左闭右开
// 版本二
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size(); // 定义target在左闭右开的区间里,即:[left, right)
while (left < right) { // 因为left == right的时候,在[left, right)是无效的空间,所以使用 <
int middle = left + ((right - left) >> 1);
if (nums[middle] > target) {
right = middle; // target 在左区间,在[left, middle)中
} else if (nums[middle] < target) {
left = middle + 1; // target 在右区间,在[middle + 1, right)中
} else { // nums[middle] == target
return middle; // 数组中找到目标值,直接返回下标
}
}
// 未找到目标值
return -1;
}
};
34.在排序数组中查找元素的第一个位置和最后一个位置
题目链接:. - 力扣(LeetCode)
二分查找 + 双指针法
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target)
{
int left = 0, right = nums.size() - 1 ,i, first = -1, last = -1;
while(left <= right)
{
i = (left + right) / 2;
if(nums[i] > target) right = i - 1;
else if(nums[i] < target) left = i + 1;
else
{
first = i, last = i;
break;
}
}
if(first == -1 && last == -1) return {first, last};
else
{
while(first > 0 && nums[first - 1] == target) first --;
while(last < nums.size() - 1 && nums[last + 1] == target) last ++;
}
return {first, last};
}
};
27. 移除元素
题目链接:. - 力扣(LeetCode)
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int i, j;
for(i = 0, j = 0; j < nums.size(); j ++)
if(nums[j] != val) nums[i++] = nums[j];
return i;
}
};
DAY2
力扣题
209.长度最小的子数组
题目链接:. - 力扣(LeetCode)
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int answer, i, t, sum;
sum = nums[0];
for(i = 0, answer = 0, t = 0, sum; i < nums.size(); i ++, t --)
{
while(sum < target)
{
t ++;
if(i + t >= nums.size())break;
sum += nums[i + t];
}
if((i + t < nums.size() && answer == 0) || (i + t < nums.size() && answer > t)) answer = t + 1;
sum -= nums[i];
}
return answer;
}
};
59.螺旋矩阵II
题目链接:. - 力扣(LeetCode)
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> a(n, vector<int>(n, 0));
int x = 0, y = 0, i = 2, n0 = n - 1, m = n, t = 0;
a[0][0] = 1;
while(i <= n * n)
{
if(t == 0)
{
while(n0 --) a[x][++y] = i++;
n0 = m - 1, t = 1;
}
if(t == 1)
{
while(n0 --) a[++x][y] = i ++;
n0 = m - 1, t = 2;
}
if(t == 2)
{
while(n0 --) a[x][--y] = i ++;
m --, n0 = m - 1, t = 3;
}
if(t == 3)
{
while(n0 --) a[--x][y] = i ++;
n0 = m - 1, t = 4;
}
if(t == 4)
{
while(n0 --) a[x][++y] = i ++;
m --, n0 = m - 1, t = 1;
}
}
return a;
}
};
卡码网题部分
58 区间和
题目链接58. 区间和(第九期模拟笔试)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int nums[100006] = {0};
int n, i, begin, end, x;
cin>>n;
nums[0] = 0;
for(i = 1; i <= n; i ++)
{
cin>>x;
nums[i] = x + nums[i - 1];
}
while(cin>>begin>>end)
{
cout<<nums[end + 1] - nums[begin]<<endl;
}
return 0;
}
44.开发商购买土地(八月三日补充)
题目链接:44. 开发商购买土地(第五期模拟笔试)
#include<bits/stdc++.h>
using namespace std;
int map1[100][100];
int map2[100][100];
int totalsum1[100];
int totalsum2[100];
int main()
{
int i, j, m, n, A, B, x, ans, d;
cin>>n>>m;
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < m; j ++)
{
cin>>x;
if(i == 0)map1[i][j] = x;
else map1[i][j] = map1[i - 1][j] + x;
if(j == 0)map2[i][j] = x;
else map2[i][j] = map2[i][j - 1] + x;
}
}
totalsum1[0] = map1[n - 1][0];
totalsum2[0] = map2[0][m - 1];
for(j = 1;j < m; j ++)
totalsum1[j]= map1[n - 1][j] + totalsum1[j - 1];
for(i = 1; i < n; i ++)
totalsum2[i] = map2[i][m - 1] + totalsum2[i - 1];
for(i = 0,ans = -1; i < m; i ++)
{
A