[学习报告]《LeetCode零基础指南》(第四讲) 数组
一.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;
}
};
今天学了还学了下二分查找但是只是会正常的二分查找还不会用到题目上没有完全理解那个旋转数组的那个题意再研究一下坚持。
相关推荐
leetcode第四题-LeetCode_Exercise:力扣_练习
leetcode 第四题力扣_练习 位掩码 结束了一些位操作和位掩码练习,难度由低到高总结了几道非常讲的位运算和位掩码题,难度由低到高 (简单的) (简单的) (强烈推荐) (中等的) (中)(强烈推荐) (中)(强烈推荐,即使你能想到每个元素出现4、5、6次而只有一个出现1次的问题,你怎么解决) (中)(强烈推荐) (难)(强烈推荐) 为什么我们需要使用Bitmask来处理一些棘手的问题? 原因1:位操作比'+-*/'等正常操作更快 原因2:位掩码可以帮助我们记录状态。 如果您使用 int 变量或布尔变量来存储状态,它将花费 4 个字节,因此您使用位 0/1 来存储状态,这将节省大量空间。 一些位掩码的操作: 1.记录状态 如果您有 8 个状态,则可以将位掩码设为 00000000,并使用“或 |” 操作以保存您的状态。 例如。 位掩码 = 00000000 new_state1 = 00001000 位掩码 | new_state1 = 00001000 这意味着已经记录了第四个状态 new_state2 = 00010001 位掩码 | new_state2 = 00011001
Leetcode:力扣个人代码C ++
Leetcode:力扣个人代码C ++
Leet Code_力扣原题_leetcode官网_
力扣网原题,可用于求职刷题,每个程序代码都正确。
leetcode卡-LeetCode:力扣解决方案
leetcode卡30 天 LeetCoding 挑战 挑战信息:
leetcode下载-leetcode:力扣的练习题
leetcode下载 简介 是不是有许多小伙伴在刷力扣的时候感觉无从下手?从头按顺序开始刷的童鞋们可能会比较有感触,为什么才第四题就感觉很难了?没关系,本文将对力扣的 1-700 题中不需要会员的数据结构与算法题目(数据库与 shell 除外)进行分类,并推荐一个刷题的顺序。 完全零基础可以刷题吗? 不能,至少要基本掌握一门计算机语言的语法。但现在在网上随便搜一下就能搜到许多关于计算机语言的教程。当然,最好还是上一下正规的课程。 刷题顺序很重要吗? 重要。按照题目类别结构化地刷题的速度不仅更快,而且可以在刷完一类题之后进行总结。对于水平较高的小伙伴们来说,按照推荐的顺序刷,可以在 200 小时内刷完 500 多题。对于萌新们来说,按照推荐顺序刷,能更好地掌握数据结构与算法基础。 题目分类及刷题顺序推荐 一. 数组 题目分类 题目编号 数组的遍历 485、495、414、628 统计数组中的元素 645、697、448、442、41、274 数组的改变、移动 453、665、283 二维数组及滚动数组 118、119、661、598、419 数组的旋转 189、396 特定顺序遍历二维数


