给你一个整数数组
arr
,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回true
;否则,返回false
。
思路:
(1)写一个函数进行判断数字的奇偶性;
(2)分别判断 i,i+1,i+2的奇偶;
int pand(int n){ if(n%2==1){ return 1; }else{ return 0; } } bool threeConsecutiveOdds(int* arr, int arrSize){ int i; for(i=0;i<arrSize-2;++i){ if(pand(arr[i])==1&&pand(arr[i+1])==1&&pand(arr[i+2])==1){ return true; } } return false; }
给你一个整数数组
nums
,请你返回其中位数为 偶数 的数字的个数。
思路:
(1)写一个函数计算并返回位数值
int pand(int n){ int num=0; while(n){ n/=10; ++num; } return num; } int findNumbers(int* nums, int numsSize){ int sum=0; int i; for(i = 0;i<numsSize;++i){ if(pand(nums[i])%2==0){ sum++; } } return sum; }
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
请你找出并返回只出现一次的那个数。
你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。
int singleNonDuplicate(int* nums, int numsSize){ int left = 0, right = numsSize - 1; while (left < right) { int mid = (left + right) / 2; if (mid % 2 == 0) { if (nums[mid] == nums[mid + 1]) { left = mid + 1; } else { right = mid; } } else { if (nums[mid] == nums[mid - 1]) { left = mid + 1; } else { right = mid; } } } return nums[right]; }
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
思路:
(1)利用双指针来进行判断;
int* exchange(int* nums, int numsSize, int* returnSize){ int i=0; int j=numsSize-1; int temp; *returnSize=numsSize; while(i<j){ while(i<j){ if(nums[i]%2==0) break; i++; } while(i<j){ if(nums[j]%2!=0) break; j--; } temp=nums[i]; nums[i]=nums[j]; nums[j]=temp; } return nums; }
给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。
中间位置 middleIndex 是满足 nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1] 的数组下标。
如果 middleIndex == 0 ,左边部分的和定义为 0 。类似的,如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0 。
请你返回满足上述条件 最左边 的 middleIndex ,如果不存在这样的中间位置,请你返回 -1 。
思路:
(1)令left=0;则right=sum;
(2)接着进行逐个遍历,找出left=right的i值;
int findMiddleIndex(int* nums, int numsSize){ int i, sum = 0, left, right; for (i = 0; i < numsSize; i++) { sum += nums[i]; } left = 0; right = sum; for (i = 0; i < numsSize; i++) { right -= nums[i]; if (left == right) return i; left += nums[i]; } return -1; }