1.枚举
采用枚举算法解题的一般思路如下:
- 确定枚举对象、枚举范围和判断条件,并判断条件设立的正确性。
- 一一枚举可能的情况,并验证是否是问题的解。
- 考虑提高枚举算法的效率。
我们可以从下面几个方面考虑提高算法的效率:
- 抓住问题状态的本质,尽可能缩小问题状态空间的大小。
- 加强约束条件,缩小枚举范围。
- 根据某些问题特有的性质,例如对称性等,避免对本质相同的状态重复求解。
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {// Allocate memory for the result (2 integers)int* result = (int*)malloc(2 * sizeof(int));// Iterate through the array to find two numbers that sum to the targetfor (int i = 0; i < numsSize; i++) {for (int j = i + 1; j < numsSize; j++) {if (nums[i] + nums[j] == target) {result[0] = i; // Store the first indexresult[1] = j; // Store the second index*returnSize = 2; // Set the size of the result arrayreturn result; // Return the result array}}}*returnSize = 0; // If no solution found, set returnSize to 0return NULL; // Return NULL if no solution is found
}
什么是质数:大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
int st[10000000]={0};
int pr[10000000]={0};
int cunt=0;void pre(int n){cunt=0;for(int i=2;i<n;i++){if(!st[i]) pr[cunt++]=i;for(int j=0;pr[j]<=n/i;j++){st[pr[j]*i]=1;if(i%pr[j]==0) break;}}
}
int countPrimes(int n) {pre(n);return cunt;
}
int countTriples(int n) {int sun=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){for(int a=1;a<=n;a++){if(i*i+j*j==a*a) sun++;}}}return sun;
}
2.递归