不會(huì)編程 做網(wǎng)站免費(fèi)的企業(yè)黃頁(yè)網(wǎng)站
🌈C++專(zhuān)欄: 南橋談C++
🌈C語(yǔ)言專(zhuān)欄: C語(yǔ)言學(xué)習(xí)系列
🌈Linux學(xué)習(xí)專(zhuān)欄: 南橋談Linux
🌈數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)專(zhuān)欄: 數(shù)據(jù)結(jié)構(gòu)雜談
🌈數(shù)據(jù)庫(kù)學(xué)習(xí)專(zhuān)欄: 南橋談MySQL
🌈Qt學(xué)習(xí)專(zhuān)欄: 南橋談Qt
🌈菜雞代碼練習(xí): 練習(xí)隨想記錄
🌈git學(xué)習(xí): 南橋談Git
283.移動(dòng)零
283.移動(dòng)零
class Solution {
public:void moveZeroes(vector<int>& nums) {int n = nums.size();int cur = 0;int dest = 0; // 已經(jīng)處理區(qū)間內(nèi)非0元素的位置// [0,dest](全是非0元素) [dest+1,cur-1](全是0元素) [cur,n-1](待處理元素)while (cur < n) {if (nums[cur]) {swap(nums[dest], nums[cur]);dest++;cur++;} else {cur++;}}}
};
1089.復(fù)寫(xiě)零
1089.復(fù)寫(xiě)零
class Solution {
public:void duplicateZeros(vector<int>& arr) {int n = arr.size();int dist = -1, cur = 0;// 先判斷cur的位置while (cur < n) {if (arr[cur]) {dist++;} else {dist += 2;}if (dist >= n - 1)break;cur++;}if (dist == n) {arr[n - 1] = 0;cur--;dist -= 2;}while (cur >= 0) {if (arr[cur]) {arr[dist] = arr[cur];cur--;dist--;} else {arr[dist--] = 0;arr[dist--] = 0;cur--;}}}
};
202.快樂(lè)數(shù)
202.快樂(lè)數(shù)
class Solution {
public:int solve(int n) {int sum = 0;while (n) {int t = n % 10;sum += t * t;n /= 10;}return sum;}bool isHappy(int n) {int slow = n, fast = solve(n);while (slow != fast) {slow = solve(slow);fast = solve(solve(fast));}return slow == 1;}
};
11.盛最多水的容器
11.盛最多水的容器
class Solution {
public:int maxArea(vector<int>& height) {int n=height.size();int left=0,right=n-1;int ans=0,ret=0;while(left!=right){ans=min(height[left],height[right])*(right-left);ret=max(ans,ret);if(height[left]>=height[right]) right--;else left++;}return ret;}
};
611.有效三角形的個(gè)數(shù)
611.有效三角形的個(gè)數(shù)
判斷三角形方法:a+b>c&&a+c>b&&b+c>a
但是這種判斷方法需要判斷三次
更加優(yōu)化的方法:三個(gè)數(shù)是排好序的,a<b<c,只需要判斷a+b>c成立與否
class Solution {
public:int triangleNumber(vector<int>& nums) {int n = nums.size();sort(nums.begin(), nums.end());int ans = 0;for (int i = n - 1; i >= 2; i--) {int left = 0, right = i - 1;while (left != right) {if (nums[left] + nums[right] > nums[i]) {ans += right - left;right--;} else {left++;}}}return ans;}
};
15.三數(shù)之和
15.三數(shù)之和
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n = nums.size();sort(nums.begin(), nums.end());vector<vector<int>> ans;for (int i = 0; i < n; i++) {if (nums[i] > 0)return ans;if (i > 0 && nums[i] == nums[i - 1])continue;int left = i + 1, right = n - 1;int t = -nums[i];while (left < right) {if (nums[left] + nums[right] < t)left++;else if (nums[left] + nums[right] > t)right--;else {ans.push_back({nums[i], nums[left], nums[right]});while (right > left && nums[right - 1] == nums[right])right--;while (right > left && nums[left + 1] == nums[left])left++;left++;right--;}}}return ans;}
};
18.四數(shù)之和
18.四數(shù)之和
class Solution {typedef long long LL;public:vector<vector<int>> fourSum(vector<int>& nums, int target) {int n = nums.size();sort(nums.begin(), nums.end());vector<vector<int>> ans;for (int i = 0; i < n; i++) {if (i > 0 && nums[i] == nums[i - 1])continue;for (int j = i + 1; j < n; j++) {if (j > i + 1 && nums[j] == nums[j - 1])continue;int left = j + 1, right = n - 1;LL t = (LL)target - nums[i] - nums[j];while (left < right) {if (nums[left] + nums[right] < t)left++;else if (nums[left] + nums[right] > t)right--;else {ans.push_back({nums[i], nums[j], nums[left], nums[right]});while (left < right && nums[left] == nums[left + 1])left++;while (left < right && nums[right] == nums[right - 1])right--;left++;right--;}}}}return ans;}
};