155. 最小栈
class MinStack {
public:
/** initialize your data structure here. */
stack<int> x_stack;
stack<int> min_stack;
MinStack() {
min_stack.push(INT_MAX);
}
void push(int x) {
x_stack.push(x);
min_stack.push(min(min_stack.top(),x));
}
void pop() {
x_stack.pop();
min_stack.pop();
}
int top() {
return x_stack.top();
}
int getMin() {
return min_stack.top();
}
};
point:
1.辅助栈min_stack
2.INT_MAX = 2^31 - 1 =2147483647
INT_MIN= - 2^31 = -2147483648
进行初始化使其大于所有数
283. 移动零
```cpp
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n=nums.size();
int count=0;
for(int i=0;i<n;i++)
{
if(nums[i]==0)count++;
}
vector<int>ans;
for(int i=0;i<n;i++)
{
if(nums[i]!=0)
{
ans.push_back(nums[i]);
}
}
while(count>0)
{
ans.push_back(0);
count--;
}
for(int i=0;i<n;i++)
{
nums[i]=ans[i];
}
}
};
1480. 一维数组的动态和 1111
class Solution {
public:
vector<int> runningSum(vector<int>& nums) {
int n=nums.size();
vector<int> ans(n);
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
ans[i]+=nums[j];
}
}
return ans;
}
};
better:
class Solution {
public:
vector<int> runningSum(vector<int>& nums) {
int n=nums.size();
for(int i=1;i<n;i++)
{
nums[i]+=nums[i-1];
}
return nums;
}
};
724. 寻找数组的中心索引
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int n=nums.size();
int sum=0,leftsum=0;
for(int i=0;i<n;i++)
{
sum+=nums[i];
}
for(int i=0;i<n;i++)
{
if(sum-nums[i]==leftsum*2)return i;
leftsum+=nums[i];
}
return -1;
}
};
point:用两个循环会超时
35. 搜索插入位置
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int n=nums.size();
if(target<nums[0])return 0;
if(target>nums[n-1])return n;
for(int i=0;i<n-1;i++)
{
if(target>nums[i]&&target<=nums[i+1])return i+1;
}
return 0;
}
};
二分查找----里面的题目可是我暂时还不会
class Solution {
public:
int search(vector<int>& nums, int target) {
int n=nums.size();
for(int i=0;i<n;i++)
{
if(target==nums[i])return i;
}
return -1;
}
};
class Solution {
public:
int mySqrt(int x) {
for(long long i=0;i<=x;i++)
{
if(i*i<=x&&(i+1)*(i+1)>x)return i;
}
return 0;
}
};
就是不用二分查找哈哈哈(为防止溢出使用longlong
unsigned int 0~4294967295
int -2147483648~2147483647
unsigned long 0~4294967295
long -2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:18446744073709551615
class Solution {
public:
int mySqrt(int x) {
if(x<=1)return x;
int left=0,right=x,ans=-1;
while(left<=right)
{
int mid=left+(right-left)/2;
if((long long)mid*mid<=x)
{
ans=mid;
left=mid+1;
}
else
{
right=mid-1;
}
}
return ans;
}
};
耶我会了一丢丢二分查找了。
374. 猜数字大小
/**
* Forward declaration of guess API.
* @param num your guess
* @return -1 if num is lower than the guess number
* 1 if num is higher than the guess number
* otherwise return 0
* int guess(int num);
*/
class Solution {
public:
int guessNumber(int n) {
int left=1,right=n,ans=-1;
while(left<=right)
{
int mid=left+(right-left)/2;
if(guess(mid)==0)return mid;
else if(guess(mid)==-1){right=mid-1;}
else{left=mid+1;}
}
return ans;
}
};
关于要不要在循环内return的问题