刷题记录 25-3-27
为了保研准备机考,写一下算法题,之前还没什么好感,写了一下,通过的时候还是很有成就感的。不过今天好困,就做这些,今天早下班了。前几天在开组会出题之类的,都在熬夜。
易错点总结
太久没写c了,但是配合LLM还是会写很多的,自己从头写的话各种小问题,大佬轻喷。
-
单引号表示字符,双引号表示字符串,不要搞混
-
有类型的函数要return
-
scanf接受的参数要加&比如scanf("%d\n", &len);
-
要用int main,return 0。
力扣hot100
有效的括号
这里的思路主要就是把左边的括号都改为右边的存储到栈里,然后有的时候直接比对就行了:
bool isValid(char* s) {
int s_len = strlen(s);
char temp[s_len];
int p = 0;
for(int i = 0; s[i] != '\0'; i++){
if(s[i] == '(' || s[i] == '[' || s[i] =='{'){
if(s[i] == '('){
temp[p++] = ')';
}else if(s[i] == '['){
temp[p++] = ']';
}else if(s[i] == '{'){
temp[p++] = '}';
}
}else if(p == 0){
return false;
}else{
if(temp[p-1] == s[i]){
temp[--p] = '\0';
}else{
return false;
}
}
}
if(strlen(temp) == 0) return true;
else return false;
}
两数之和
这里的思路很简单就是暴力求解:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
int temp_sum = 0;
*returnSize = 0;
int *return_index = (int*) malloc(2*sizeof(int));
for (int i = 0; i < numsSize; i++){
{
for(int j = i+1; j < numsSize; j++){
temp_sum = nums[i] + nums[j];
if(temp_sum == target){
return_index[0] = i;
return_index[1] = j;
*returnSize = 2;
return return_index;
}
}
}
}
return return_index;
}
洛谷题单 2023 官方题单(1~4 月)
[yLOI2023] 分解只因数
就是看是不是奇数就行。但是要写int main……我以为void也行。
#include <stdio.h>
int main(){
long long len = 0;
scanf("%d", &len);
long long get[len];
long long temp = 0;
for(int i = 0; i < len; i++){
scanf("%lld", &get[i]);
}
for(int i = 0; i < len; i++){
temp = get[i] % 2;
if(temp != 0){
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}