leetcode
klaus007
算法才是核心!
展开
-
计数质数
统计所有小于非负整数 n 的质数的数量。 解题思路 每次判断只从质数库中找因数,而不是每个数都尝试,j范围是动态变化的,为 判定数/待判断因数,以便大幅减少范围。 代码 class Solution { public: int countPrimes(int n) { if (n < 3) return 0; vector<int>primes = {3,5,7,11,13}; //构建质数库,放入从3开始初始5个质数原创 2020-07-26 10:00:48 · 145 阅读 · 0 评论 -
只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 思路:排序后,从第二个数开始,每隔一个数字取负,然后累加,和即要找的数。 class Solution { public: int singleNumber(vector<int>& nums) { sort(nums.begin(),nums.end());int sum=0; for(int i=1;i<nums.size();i+=2原创 2020-07-25 21:25:01 · 105 阅读 · 0 评论 -
存在重复元素
class Solution { public: bool containsDuplicate(vector<int>& nums) { if(nums.size()<=1) return false; sort(nums.begin(),nums.end()); for(int i=1;i<nums.size();i++) if(nums[i]==nums[i-1])原创 2020-07-25 21:21:51 · 102 阅读 · 0 评论 -
旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 思路1:将最后一个元素弹出,并插到数组首位,原数组已经改变,循环执行k次即可。 class Solution { public: void rotate(vector<int>& nums, int k) { for(int i=0;i<k;i++) {int temp = *(nums.end()-1); nums.pop_back(); nums原创 2020-07-25 16:46:11 · 101 阅读 · 0 评论 -
买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 思路:寻找最低点(若第一个点比第二个小也算),一般情况需要满足prices[i]<=prices[i-1]&&prices[i]<prices[i+1] 买入,寻找最高点 (如果是最后一个点直接算),一般情况需要满足prices[i]>=prices原创 2020-07-25 14:02:41 · 99 阅读 · 0 评论 -
删除排序数组重复项
删除排序数组重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 思路1:由于是排序数组,不考虑需要的长度后面的元素,定义新变量i,将要获得的数储存到i为下标的原数组中。 int removeDuplicates(vector<int>& nums) { int i = 1; if(nums.size()==0原创 2020-07-25 13:01:55 · 156 阅读 · 0 评论