题目1:
int isevenbit(int num) { int cnt=0; while(num) {
num=num/10; cnt++; } return (cnt%2==0); }
int findNumbers(int* nums, int numsSize) { int ret=0;
for(int i=0;i<numsSize;i++) { if(isevenbit(nums[i]))
{ ret++; } }
return ret; }
题目2:
int singleNonDuplicate(int* nums, int numsSize) { for(int i=1;i<numsSize;i++)
{ nums[0]=nums[0]^nums[i]; } return nums[0]; }
题目3:
//模拟快速排序的思想,利用左右指针 int* exchange(int* nums, int numsSize, int* returnSize) {
int left=0; int right=numsSize-1; while(left<right) {
while(left<right) { if(nums[left]%2!=0)
left++; else break; }
while(left<right) { if(nums[right]%2!=1)
right--; else break; }
int tmp=0; tmp=nums[left]; nums[left]=nums[right];
nums[right]=tmp; left++; //进行下一次 right--; //进行下一次 }
*returnSize=numsSize; return nums; }
题目4:
//数列和=左边和*2+中间位置值 int findMiddleIndex(int* nums, int numsSize) {
int total = 0; for (int i = 0; i < numsSize; ++i) {
total += nums[i]; } int sum = 0;
for (int i = 0; i < numsSize; ++i) {
if (2 * sum + nums[i] == total) { return i;
} sum += nums[i]; } return -1; }
题目5:
int pivotIndex(int* nums, int numsSize) { int total=0;
for(int i=0;i<numsSize;i++) { total+=nums[i]; }
int sum=0; for(int j=0;j<numsSize;j++) {
if(sum*2+nums[j]==total) { return j; }
sum+=nums[j]; } return -1; }
题目6:
//双指针 /快慢指针;块指针遍历数组,慢指针改变数组 int removeDuplicates(int* nums, int numsSize) {
if (numsSize == 0) { return 0; }
int fast = 1, slow = 1; while (fast < numsSize) {
if (nums[fast] != nums[fast-1]) {
nums[slow] = nums[fast]; slow++; }
fast++; } return slow; }
题目7:
bool* prefixesDivBy5(int* nums, int numsSize, int* returnSize) {
*returnSize = numsSize; bool* answer = malloc(sizeof(bool) * numsSize);
int sum = 0; for (int i = 0; i < numsSize; i++) {
sum = ((sum<< 1) + nums[i]) % 5; if(sum==0)
answer[i]=1; else answer[i]=0; }
return answer; }
题目8:
int smallestRepunitDivByK(int k) { if(k%2==0||k%5==0) {
return -1; } int cnt=1; int x=1; while(x%k!=0) {
x=(x*10+1)%k; cnt++; } return cnt; }
题目9:
bool checkZeroOnes(char * s) { int len=strlen(s); int cnt1=0;
int cnt2=0; int sum1=0; int sum2=0; for(int i=0;i<len;i++)
{ if(s[i]=='1') { cnt2++; sum2=0;
if(cnt2>cnt1) { cnt1=cnt2; } }
if(s[i]=='0') { sum2++; cnt2=0;
if(sum2>sum1) { sum1=sum2; } }
} return cnt1>sum1?true:false; }