数组
第三天的昨天就应该发的,但忘了,现在补上嘿嘿;
大家可以跟着我的刷题顺序来刷题,真的是轻松加愉快呢
今天开始就需要有一些逻辑推理能力了,一定要理解数组的操作才可以更好的做题
第一题
long long num[50];
int climbStairs(int n) {
num[0] = 1;
num[1] = 1;
for(long long i = 2; i < 50; i++) {
num[i] = num[i - 1] + num[i - 2];
}
return num[n];
}
int类型判断越界了,就换成long long长整型才可以了。
第二题
int f[31];
int fib(int n){
f[0] = 0;
f[1] = 1;
for(int i = 2; i < 31; i++) {
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}
经典的斐波那契数列,使用数组实现,和上面的题目基本一致.
第三题
1137. 第 N 个泰波那契数 - 力扣(LeetCode)
int t[40];
int tribonacci(int n){
t[0] = 0;
t[1] = 1;
t[2] = 1;
for(int i = 3; i < 38; i++) {
t[i] = t[i - 1] + t[i - 2] + t[i - 3];
}
return t[n];
}
同样和上面两题一样,需要多加一个数字;
第四题
2006. 差的绝对值为 K 的数对数目 - 力扣(LeetCode)
int countKDifference(int* nums, int numsSize, int k) {
int count = 0;
for(int j = 1; j < numsSize; j++) {
for(int i = 0; i < j; i++) {
int temp = nums[i] - nums[j];
if(temp < 0) {
temp = -temp;
}
if(temp == k) count++;
}
}
return count;
}
使用双重循环,根据题目中给定的条件判断
第五题
int game(int* guess, int guessSize, int* answer, int answerSize){
int ans = 0;
for(int i = 0; i < 3; i++) {
if(guess[i] == answer[i]) ans++;
}
return ans;
}
一共进行三次,循环3次
第六题
int minCount(int* coins, int coinsSize){
int res = 0;
for(int i = 0; i < coinsSize; i++){
res += (coins[i] + 1) / 2;
}
return res;
}
本质是奇数和偶数的分情况处理,如果是奇数,返回(x + 1) / 2
;如果是偶数,返回x / 2
;
第七题
LCR 069. 山脉数组的峰顶索引 - 力扣(LeetCode)
int peakIndexInMountainArray(int* arr, int arrSize){
int res = -1;
for(int i = 1; i < arrSize - 1; i++) {
if(arr[i] > arr[i + 1]) {
res = i;
break;
}
}
return res;
}