64,172
社区成员




一.33. 搜索旋转排序数组
这三道数组题虽然会基本二分查找但是没有完全看明白题意,就先没管旋转了,就不用二分
class Solution {
public:
int search(vector<int>& nums, int target) {
int index = -1;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == target) {
return i;
}
}
return index;
}
};
二.搜索旋转排序数组 II
class Solution {
public:
bool search(vector<int>& nums, int target) {
for (int i = 0; i < nums.size(); i++) {
if (target == nums[i]) {
return true;
}
}
return false;
}
};
三.寻找旋转排序数组中的最小值
class Solution {
public:
int findMin(vector<int>& nums) {
int min = 5000;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] < min) {
min = nums[i];
}
}
return min;
}
};
四.爬楼梯
递归超时,
今天学会了一种新方式动态的数组那样因为结果是只用前二个,前面的所有系列后面不用放在就浪费空间了
//第一种
class Solution {
public:
int climbStairs(int n) {
if (n <= 2) {return n;}
int arr[1000] = {0};
arr[1] = 1,arr[2] = 2;
int i;
for (i=3; i <= n; i++) {
arr[i] = arr[i-1] + arr[i-2];
}
return arr[i-1];
}
};
//第二种
class Solution {
public:
int climbStairs(int n) {
if (n <= 2) {return n;}
int a = 1,b = 2;
int i;
for (i=3; i <= n; i++) {
int c = a + b;
a = b;
b = c;
}
return b;
}
};
五.斐波那契数
class Solution {
public:
int fib(int n) {
if(n < 2) return n;
int dp[2];
dp[0] = 0,dp[1] = 1;
for (int i = 2; i <= n; i++) {
int sum = dp[0] + dp[1];
dp[0] = dp[1];
dp[1] = sum;
}
return dp[1];
}
};
class Solution {
public:
int fib(int n) {
if(n < 2) return n;
return fib(n-1) + fib(n-2);
}
};
class Solution {
public:
int fib(int n) {
if(n < 2) return n;
int arr[31] = {0};
arr[1] = 1;
int i;
for ( i = 2; i<=n; ++i) {
arr[i] = arr[i-1] + arr[i-2];
}
return arr[i-1];
}
};
六.第 N 个泰波那契数
class Solution {
public:
int tribonacci(int n) {
if (n == 0) {
return 0;
} else if (n == 1 || n == 2){
return 1;
}
int dp[3];
dp[0] = 0,dp[1] = 1,dp[2] = 1;
for (int i = 3; i <= n; i++) {
int sum = dp[0] + dp[1] + dp[2];
dp[0] = dp[1];
dp[1] = dp[2];
dp[2] = sum;
}
return dp[2];
}
};
七.差的绝对值为 K 的数对数目
class Solution {
public:
int countKDifference(vector<int>& nums, int k) {
int cnt = 0;
for (int i = 0; i < nums.size(); i++) {
for (int j = i+1; j < nums.size(); j++) {
if (abs(nums[i] - nums[j]) == k) {
++cnt;
}
}
}
return cnt;
}
};
八.LCP 01. 猜数字
class Solution {
public:
int game(vector<int>& guess, vector<int>& answer) {
int cnt = 0;
int i;
for (i = 0; i<3; i++) {
if(guess[i] == answer[i]) {++cnt;}
}
return cnt;
}
};
//三目我觉得好看点
class Solution {
public:
int game(vector<int>& guess, vector<int>& answer) {
int cnt = 0;
int i;
for (i = 0; i<3; i++) {
cnt += (guess[i] == answer[i]) ? 1 : 0;
}
return cnt;
}
};
九.拿硬币
一开始用判断奇数偶数后面发现int 偶数+1/2次数还是一样
class Solution {
public:
int minCount(vector<int>& coins) {
int cnt = 0;
int i;
for (i = 0; i<coins.size(); i++) {
cnt += (coins[i] + 1) / 2;
}
return cnt;
}
};
今天学了还学了下二分查找但是只是会正常的二分查找还不会用到题目上没有完全理解那个旋转数组的那个题意再研究一下坚持。