网站开发开题报告引言,制作钓鱼网站,wordpress主题移植,seo搜索引擎优化步骤1.哈希表 常见的哈希表分为三类#xff0c;数组#xff0c;set#xff0c;map#xff0c;C语言的话是不是只能用数组和 2.例题 题目一#xff1a; 分析#xff1a;题目就是判断两个字符串出现的次数是否相同#xff1b; 1#xff09;哈希表26个小写字母次数初始化为0数组setmapC语言的话是不是只能用数组和 2.例题 题目一 分析题目就是判断两个字符串出现的次数是否相同 1哈希表26个小写字母次数初始化为0 2遍历s字符串字母次数遍历t字符串字母次数– 3看hash是否全部为0 为0说明s和t是字母异位词
bool isAnagram(char * s, char * t){int hash[26] {0}; //注意这里必须初始化为0不然用例过不了int slen strlen(s);int tlen strlen(t);if (slen ! tlen) {return false;}// 统计s所有字母出现的频率在哈希表里for (int i 0; i slen; i) { hash[s[i] - a];// -a就是字母下标做了一个映射 a就是0就是1; }// 如何比对t 呢 遍历t数组的时候看hash表是不是都是0了如果是0 则说明两个数组元素相同for (int i 0; i tlen;i) {hash[t[i] - a]--;// 前一个 后一个-- 如果s t相同hash肯定为0了}for (int i 0; i 26;i) {if (hash[i] ! 0) {return false;}}return true;
}题目二
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){int hash[1000] {0};int lessSize nums1Size nums2Size ? nums1Size : nums2Size;int *result (int *)malloc(sizeof(int)* lessSize);int resultIndex 0;for(int i 0; i nums1Size; i ) {hash[nums1[i]];}for(int i 0; i nums2Size; i ) {if(hash[nums2[i]] 0) {result[resultIndex] nums2[i];resultIndex ;hash[nums2[i]] 0;}}* returnSize resultIndex;//一定要赋值return result;
}题目三 分析 1)三数之和固定三个数nums[i],nums[left] , nums[right] 就是求nums[i] nums[left] nums[right]; 2)这个三个数都要去重nums[i]去重nums[i] nums[i - 1] 不能写成 nums[i] nums[i 1]因为i1是left 3left 和 right去重nums[left] nums[left 1] nums[right] nums[right - 1]
int comp(const void* a,const void* b){return *(int *)a - *(int *)b;
}int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes)
{qsort(nums,numsSize,sizeof(int),comp);//排序int** res malloc(sizeof(int*) * 18000);* returnSize 0;int count 0;for (int i 0; i numsSize; i) {int left i 1;int right numsSize - 1;if(nums[i] 0) continue;else if(i 0 nums[i] nums[i - 1]) continue; //为啥是i-1要好好想想 i1是leftelsewhile (left right) { int sum nums[i] nums[left] nums[right];if (sum 0) {right--;} else if (sum 0) {left;} else if (sum 0) {res[count]malloc(sizeof(int) * 3);res[count][0] nums[i];res[count][1] nums[left];res[count][2] nums[right];count;//剪枝--如果出现相同nums[left]或nums[right]的情况就跳过while (left right nums[left] nums[left 1]) {left;}while (left right nums[right] nums[right - 1]) {right--;} left;right--;}}}//设置返回参数*returnSize count;*returnColumnSizes malloc(sizeof(int) * count);for(int i 0; i count; i) {returnColumnSizes[0][i]3;}return res;
}