赞
踩
个人觉得这个模块还是很不错的,适合像我一样初学算法的童鞋入门,我一般使用c++做题的(c和java也会 )
下面会简单介绍一下我的对每个题目的想法,之后可能会录制讲解视频放到B站供童鞋们参考!
给定 nums = [0,0,1,1,1,2,2,3,3,4]
首先我们需要设定一个变量用来记录去重后数组的长度,我们从下标为1处开始,比较前一个数是否与当前的数相等,如果相等的话,就判断下一个,直到找到不相等的时候,然后让去重的数组的长度加1,并且把这个未出现过的值添加到去重的数组里
对于下标为0的值首先添加到去重数组,长度加1,然后再往后判断,0与0相等,然后判断下一个,1与0不相等,那么将1添加到去重数组…依次类推就可以得到正确答案:0 1 2 3 4
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int sum = 0;
for(int i = 0; i < nums.size(); i++)
if(i == 0 || nums[i] != nums[i-1]) nums[sum++]=nums[i];
return sum;
}
};
class Solution {
public:
int maxProfit(vector<int>& prices) {
int sum = 0;
for(int i = 1; i < prices.size(); i++)
if(prices[i] > prices[i-1]) sum += prices[i] - prices[i-1];
return sum;
}
};
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k %= nums.size();
reverse(nums.begin(),nums.end());
reverse(nums.begin(),nums.begin()+k);
reverse(nums.begin()+k,nums.end());
}
};
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i = 1; i < nums.size(); i++){
if(nums[i-1] == nums[i]) return true;
}
return false;
}
};
class Solution {
public:
int singleNumber(vector<int>& nums) {
int num=0;
for(int i : nums) num ^= i;
return num;
}
};
class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { vector<int> nums3; sort(nums1.begin(),nums1.end()); sort(nums2.begin(),nums2.end()); for(int i=0,j=0;i<nums1.size()&&j<nums2.size();){ if(nums1[i]==nums2[j]){ nums3.push_back(nums1[i]); i++; j++; }else if(nums1[i]>nums2[j]){ j++; }else{ i++; } } return nums3; } };
class Solution { public: vector<int> plusOne(vector<int>& digits) { reverse(digits.begin(),digits.end()); int tmp=0; digits[0]++; for(int i=0;i<digits.size();i++){ digits[i] += tmp; tmp = digits[i] /10; digits[i] %= 10; } if(tmp) digits.push_back(tmp); reverse(digits.begin(),digits.end()); return digits; } };
class Solution {
public:
void moveZeroes(vector<int>& nums) {
for(int i=0,j=0;i<nums.size();i++){
if(nums[i]){
if(i!=j) swap(nums[j],nums[i]);
j++;
}
}
}
};
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> ans; vector<int> temp; temp=nums; int n=temp.size(); sort(temp.begin(),temp.end()); int i=0,j=n-1; while(i<j){ if(temp[i]+temp[j]>target)j--; else if(temp[i]+temp[j]<target)i++; else break; } if(i<j){ for(int k=0;k<n;k++){ if(i<n&&nums[k]==temp[i]){ ans.push_back(k); i=n; } else if(j<n&&nums[k]==temp[j]){ ans.push_back(k); j=n; } if(i==n&&j==n)return ans; } } return ans; } };
class Solution { public: bool isValidSudoku(vector<vector<char>>& board) { int row[9][9] ={}; int col[9][9] ={}; int block[9][9] ={}; for(int i = 0; i < 9; i++){ for(int j = 0; j < 9; j++){ if(board[i][j] != '.'){ if(row[i][board[i][j]-'1']++) return false; else if(col[j][board[i][j]-'1']++) return false; else if(block[(i/3)*3+j/3][board[i][j]-'1']++) return false; } } } return true; } };
class Solution { public: void rotate(vector<vector<int>>& matrix) { int cycle = matrix.size() / 2, len = matrix.size(), tmp,t; for(int i = 0; i < cycle; i++){ for(int j = i; j < len - 1 - i; j++){ tmp = matrix[i][j]; matrix[i][j] = matrix[len - 1 -j][i]; t = matrix[j][len - 1 - i]; matrix[j][len - 1 - i] = tmp; tmp = matrix[len - 1 - i][len - 1 -j]; matrix[len - 1 - i][len - 1 - j] = t; matrix[len - 1 - j][i] = tmp; } } } };
这些题目看着简单,但是题目给出了一些限制条件,我们平时使用的方法可能就被限制了,需要我们拓展思维,思考其他的方法来解决问题!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。