389. 找不同
389. 找不同
https://leetcode-cn.com/problems/find-the-difference/
题目描述
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
思路
这个题目吧,我之前写过,之前写的实在太强了,我都佩服我自己-.-
还记得异或的性质么。就是异或异或之后就抵消了。所以把所有元素全部异或一边不就得到了最终的值?
char findTheDifference(char * s, char * t){ char ans = 0; for(int i = 0;s[i];i++) ans ^= s[i]; for(int j = 0;t[j];++j) ans ^= t[j]; return ans; }
1431. 拥有最多糖果的孩子
1431. 拥有最多糖果的孩子
https://leetcode-cn.com/problems/kids-with-the-greatest-number-of-candies/
题目描述
给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。
对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目
思路
这个题目需要先求出来最大值,然后分别判断就好了,注意空集的处理。
bool* kidsWithCandies(int* candies, int candiesSize, int extraCandies, int* returnSize){ int max = 0; if(candiesSize == 0){ *returnSize = 0;return NULL;} *returnSize = candiesSize; bool *ans = malloc(sizeof(bool)*candiesSize); for(int i = 0; i < candiesSize;i++) //求最大 if(max < candies[i]) max = candies[i]; for(int i = 0; i < candiesSize;i++)//计算结果 ans[i] = (candies[i] + extraCandies >= max); return ans; }
1588. 所有奇数长度子数组的和
1588. 所有奇数长度子数组的和
https://leetcode-cn.com/problems/sum-of-all-odd-length-subarrays/
题目描述
给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。
子数组 定义为原数组中的一个连续子序列。
请你返回 arr 中 所有奇数长度子数组的和 。
思路
肯定有简单的方法,但是,不想想了,我直接暴力,三循环0.0
int sumOddLengthSubarrays(int* arr, int arrSize){ int sum = 0; for(int len = 1; len <= arrSize; len += 2 ) for(int start = 0; start +len <= arrSize; ++ start) for(int i = start; i < start + len; ++i) sum += arr[i]; return sum; }
1534. 统计好三元组
1534. 统计好三元组
https://leetcode-cn.com/problems/count-good-triplets/
题目描述
给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。
如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。
0 <= i < j < k < arr.length
|arr[i] - arr[j]| <= a
|arr[j] - arr[k]| <= b
|arr[i] - arr[k]| <= c
其中 |x| 表示 x 的绝对值。
返回 好三元组的数量 。
思路
肯定有简单的方法,但是,不想想了,我直接暴力,三循环0.0
int countGoodTriplets(int* arr, int arrSize, int a, int b, int c){ int ans = 0; for(int i = 0;i < arrSize -2;i++) for(int j = i + 1;j < arrSize - 1;j++) for(int k = j + 1;k < arrSize;k++) if(abs(arr[i] - arr[j]) <= a && abs(arr[j] - arr[k]) <= b && abs(arr[i] - arr[k]) <= c) ans++;//满足条件判断 return ans; }
771. 宝石与石头
771. 宝石与石头
https://leetcode-cn.com/problems/jewels-and-stones/
题目描述
给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
字母区分大小写,因此 "a" 和 "A" 是不同类型的石头。
思路
典型hash题,不解释。
int numJewelsInStones(char * jewels, char * stones){ bool has[256]; int ans = 0; memset(has, 0, sizeof(has)); for(int i = 0; jewels[i]; ++i)//设置hash if(has[jewels[i]] == 0) has[jewels[i]] = 1; for(int i = 0; stones[i]; ++i) if(has[stones[i]] == 1) ans++; return ans; }
1389. 按既定顺序创建目标数组
1389. 按既定顺序创建目标数组
https://leetcode-cn.com/problems/create-target-array-in-the-given-order/
题目描述
给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:
目标数组 target 最初为空。
按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。
重复上一步,直到在 nums 和 index 中都没有要读取的元素。
请你返回目标数组。
题目保证数字插入位置总是存在。
思路
让干啥干啥就完事了。
void inserst(int *ans,int *size,int weizhi,int k){ int wei = (*size)++; while(wei != weizhi) ans[wei] = ans[wei - 1],wei--; ans[weizhi] = k;//插入 } int* createTargetArray(int* nums, int numsSize, int* index, int indexSize, int* returnSize){ int *ans = malloc(sizeof(int) * numsSize); *returnSize = 0; for(int i = 0;i < indexSize;i++) inserst(ans,returnSize,index[i],nums[i]); return ans; }
14. 最长公共前缀
14. 最长公共前缀
https://leetcode-cn.com/problems/longest-common-prefix/
题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
思路
按照一步一步求就好了。直接看把。
int qianzui(char *s,char *t,int size){//求两个字符串的公共前缀在第一个串的位置 int i; for(i = 0;t[i] && i <= size;i ++) if(s[i]!= t[i]) return i - 1; if(!t[i]) return i - 1; return size; } char * longestCommonPrefix(char ** strs, int strsSize){ if(strsSize < 2) return strs[0]; int size = strlen(strs[0])-1; size = qianzui(strs[0],strs[1],size); for(int i = 2;i<strsSize;i++) size = qianzui(strs[0],strs[i],size); //写入并返回结果 char *ans = malloc(sizeof(char)*(size +2)); for(int i = 0;i <= size;i++) ans[i] = strs[0][i]; ans[size + 1] = 0; return ans; }
1925. 统计平方和三元组的数目
1925. 统计平方和三元组的数目
https://leetcode-cn.com/problems/count-square-sum-triples/
题目描述
一个 平方和三元组 (a,b,c) 指的是满足 a2 + b2 = c2 的 整数 三元组 a,b 和 c 。
给你一个整数 n ,请你返回满足 1 <= a, b, c <= n 的 平方和三元组 的数目。
思路
直接暴力刚0.0
int max( int a, int b){ return a > b ? a : b; } int countTriples(int n){ int a, b , c, sum, ans = 0, n1 = n /1.4;//根号2 嘿嘿黑 缩小范围 for(int a = 1; a <= n1 ; ++a){ for(b = a; b < n ; ++b){ sum = a*a + b*b; for(c = max(a, b) +1; c <= n; c++){ if(sum == c *c){ if(a !=b ) ans += 2; else ans++; break; } else if(sum < c*c) break; } } } return ans; }