题目 传送门 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。 返回该 最大总和 。 示例 1: 输入:nums = [1,4,3,2] 输出:4 解释:所有可能的分法(忽略元素顺序)为: (1, 4), (2, 3) -> m
LeetCode 448. 找到所有数组中消失的数字-C语言 题目描述 解题思路 我们可以用一个哈希表记录数组 nums 中的数字,由于数字范围均在 [1,n]中,记录数字后我们再利用哈希表检查 [1,n]中的每一个数是否出现,从而找到缺失的数字。 代码 int* findDisappearedNumbers(int* nums, int
#include <stdio.h> #include <stdlib.h> int* twoSum(int* nums, int numsSize, int target){ for(int i=0;i<numsSize-1;i++) { for(int j=i+1;j<numsSize;j++) { if(nums[i]+nums[j]==target) {
LeetCode 485. 最大连续1的个数-C语言 题目描述 解题思路 在给定数组中遍历每一数组项,为1时count加一,并比较count和max大小,将较大的值赋给max,为0时count清零。 代码 int findMaxConsecutiveOnes(int* nums, int numsSize){ int i; int count = 0, max = 0; for
LeetCode 414. 第三大的数-C语言 题目描述 解题思路 1.设置数组max[3]用于保存前三大的值,初始化为LONG_MIN意为最小值 2.遍历数组对前三大的值进行更新 3.判断max[2]是否存在,若不存在直接返回max[0] 代码 int thirdMax(int* nums, int numsSize){ long max[3] = {LONG_M
原题题目 代码实现(首刷自解) int rob(int* nums, int numsSize){ int dp[101] = {0},i,max = 0; dp[0] = 0; for(i=1;i<=numsSize;i++) { dp[i] = nums[i-1]; if(i >= 3) dp[i] += fmax(dp[i-2],dp[i-3]); if(dp[i] >
LeetCode 169. 多数元素-C语言 题目描述 解题思路 可以看做好几个不同军队抢夺一个高地,他们一对一消耗,因为有个军队超过了n/2,经过消耗后,他还有人活着。 代码 int majorityElement(int* nums, int numsSize){ int key = nums[0]; int num = 0; for (int i = 0; i
LeetCode 169. 多数元素-C语言 题目描述 解题思路 可以看做好几个不同军队抢夺一个高地,他们一对一消耗,因为有个军队超过了n/2,经过消耗后,他还有人活着。 代码 int majorityElement(int* nums, int numsSize){ int key = nums[0]; int num = 0; for (int i = 0; i
这个问题应该叫做“指针空引用”,产生的原因是因为程序中引用了赋值为空的空指针。 错误代码如下: #include <stdio.h> #include <stdlib.h> int* twoSum(int* nums, int numsSize, int target, int* returnSize) { int i,j; static int a[2]={0}; for(i=0;i<nums
// language c // 剑指56-I // https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/ // 通过了,但是肯定能优化,需要用到亦或,不太懂 /** * Note: The returned array must be malloced, assume caller calls free(). */ // 排序是nlogn不太符合,但是
language: C address // 考研做过,不解释 int majorityElement(int* nums, int numsSize){ int ans,count = 0; for(int i = 0; i < numsSize; i++){ if(count==0){ ans = nums[i]; count++; }else if(ans==nums[i]){
address /** * Note: The returned array must be malloced, assume caller calls free(). */ int* exchange(int* nums, int numsSize, int* returnSize){ int i = 0, j = numsSize-1; while(i<j){ while((i<numsSize)&&(nums[i]%2==1)){ i++; }
原题题目 代码实现(首刷自解)DP 一遍遍历 int massage(int* nums, int numsSize){ if(!numsSize) return 0; int dp[1000] = {0},i,maxtime = -1; for(i=0;i<numsSize;i++) { if(i<=1) dp[i] = nums[i]; else if(i ==
题目描述 题目直接截图于力扣(LeetCode)。 该题网址:https://leetcode-cn.com/problems/jump-game-ii/ 我才发现英文版的题目他给出了约束条件,而中文貌似没有。吃了偷懒的亏,以后还是看英文吧,顺带还能学习一下英语。~(OvO)~ 下面是英文题目: 下面是中文题目:
原题题目 代码实现(首刷自解) int maxSubArray(int* nums, int numsSize){ int sum = -101,tempsum = 0,i; for(i=0;i<numsSize;i++) { tempsum += nums[i]; if(tempsum > sum) sum = tempsum; if(tempsum < 0)
address // 第一种解法,比较好,因为题目不让用除法,而第二种写之前没看清题目,所以用了除法 int* productExceptSelf(int* nums, int numsSize, int* returnSize){ returnSize[0] = numsSize; int* answer = (int *)malloc(sizeof(int) * numsSize); answer[0] = 1; for(int i
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 来源:力扣
2021年 1月10日 星期日 题目描述: 给定一个无重复元素的有序整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按如
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中,任意两个数之间汉明距离的总和。 注意: 数组中元素的范围为从 0到 10^9。数组的长度不超过 10^4。 int totalHammingDistance(int* nums, int numsSize){ int totalnum = 0; int
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/house-robber 著作权归领扣网络所有 题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯
int* majorityElement(int* nums, int numsSize, int* returnSize){ int* res =(int*)calloc(2,sizeof(int)); *returnSize=0; if (nums == NULL || numsSize == 0) return res; // 初始化两个候选人candidate,和他们的计票 int cand1 = nums[0], count1 =
#define max(a,b) ((a)>(b))?(a):(b); int rob(int* nums, int numsSize){ if(numsSize==1) return *nums; int dp[2][101]={0}; dp[0][0]=nums[0]; dp[0][1]=nums[0]; dp[1][1]=nums[1]; for (int i=2; i<numsSize; i++){
题目 <https://leetcode-cn.com/problems/partition-equal-subset-sum/> 最初想法是两数之和,三数之和的思路 之后的想法是回溯法,直接超时。。。 void sort(int* nums, int numsSize) { int left,right,mid,n; mid = 0; left = 1; right = numsSize -1; if(left>ri
给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 最简洁的代码: set函数去重 class Solution: def containsDuplicate(self, nums: List[int]) -> bool: return len(nums) !
int cmp(const void* a, const void* b){ return *(int*)a - *(int*)b; } void recursion(int* nums, int numsSize, int* returnSize, int* returnColumnSizes, int cnt, int** arr, int* temp, int* hash){ if (cnt == numsSize){ arr[(*returnSize)] =