序言–自感
荒废了2年了,抬头看看前路茫茫,低头看看小路泥泞,偏头看看远方的大佬们,和正在努力向前奔跑的后进者们,又回头看了看自己的身后,什么都没留下了。希望现在回头不算太晚,希望未来的自己为今天的抉择庆幸:就让今天成为新的开始吧。
发布博客记录每天的所见所学所感:记录每天解决的题目,包括思路,实现,出现的问题,所学到的新的内容,发现的问题,留下的疑惑,以及自己的感觉等等等等
首先身为一个计算机的学生,我打字貌似太慢了,还要看键盘,就这行字我居然用1分钟。。。。
####################################正文开始###################################
博客上的第一道题(也是我第一次用Leetcode)
题目
其实我一开始看见vector nums 还没认出来这玩意是个容器,在pyf同志的解说下我才知道这玩意可以算是个十分好用的有很多自带的函数的数组。
对于题目,我的想法是只要找到数组中间最大的那个,除了他之外的所有加一就可以了。
理论上可行。
第一次实现:
class Solution {
public:
int minMoves(vector<int>& nums) {
int tmp=0 ,n=nums.size();
int result=0;
int flag1=1;
for(int i=0;i<n-1;i++){
if(nums[i]!=nums[i+1])
flag1=0;
}
if(flag1==1)
return 0;
while(1){
for(int i=0;i<n;i++){
if(nums[tmp]<nums[i])
tmp=i;
}
for(int i=0;i<n;i++){
if(tmp!=i)
nums[i]++;
}
result++;
int flag=1;
for(int i=0;i<n-1;i++){
if(nums[i]!=nums[i+1])
flag=0;
}
if(flag==1)
return result;
}
}
};
貌似是有点麻烦了哈
第二次实现
再次观察后发现,若除本身全部加1,相当于其他不变,自己减一;因此只要选出最小的数,其他的全部减到该数值即可。
class Solution {
public:
int minMoves(vector<int>& nums) {
int n=nums.size();
int result=0;
int temp=nums[0];
for(int i=0;i<n;i++){
if(nums[i]<temp)
temp=nums[i];
}
for(int i=0;i<n;i++)
result+=(nums[i]-temp);
return result;
}
};
终于过了
其实还是想想知道不用这做法,直接的思路能不能做过去,是自己的代码浪费的时间太多了吗。
所学知识汇总
(网上搜集汇总)
STL中就自带了排序函数sort()对给定区间所有元素进行排序 要使用此函数只需用
include < algorithm >//(为啥不加空格打不出来)即可使用,语法描述为:
sort(begin,end),表示一个范围,例子:
#include < algorithm>
int main()
{
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<<a[i]<<endl;
sort(a,a+20);
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}
输出结果将是把数组a按升序排序,说到这里可能就有人会问怎么样用它降序排列呢?这就是下一个讨论的内容.
一种是自己编写一个比较函数来实现,接着调用三个参数的sort:sort(begin,end,compare)就成了。对于list容器,这个方法也适用,把compare作为sort的参数就可以了,即:sort(compare).
bool compare(int a,int b)
{
return a<b; //升序排列,如果改为return a>b,则为降序
}
#include < algorithm>
int main()
{
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<<a[i]<<endl;
sort(a,a+20,compare);
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}
另一种是自带的
Sort函数的第三个参数可以用这样的语句告诉程序你所采用的排序原则
less<数据类型>()//从小到大排序
greater<数据类型>()//从大到小排序
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,greater<int>());
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
一些关于C++中关于vector的函数(转自
https://blog.csdn.net/Bing_Lee/article/details/77727544
)
- v.push_back(t) 在容器的最后添加一个值为t的数据,容器的size变大。
另外list有push_front()函数,在前端插入,后面的元素下标依次增大。 - v.size() 返回容器中数据的个数,size返回相应vector类定义的size_type的值。v.resize(2v.size)或
v.resize(2v.size, 99) 将v的容量翻倍(并把新元素的值初始化为99) - v.empty() 判断vector是否为空
- v[n] 返回v中位置为n的元素
- v.pop_back() 删除容器的末元素,并不返回该元素
- v.clear()
- 亦可以用sort()排序:sort(v1.begin(),vi.begin()+v1.size()/2); 对v1的前半段元素排序
发现问题汇总
1、打字太慢,可能也是好久没用这个键盘额
2、貌似代码看着并不美观啊
3、变量命名太呆滞了,可读性不行
4、不太经常打注释啊
总结
想法还是有点死板了吧,直接就想到直接撸,有时候想问题还是要灵活一点啊
总体来说做个博客挺费时间的、不过主要是打字太慢了吧,坚持就是胜利
总算是迈出了第一步,相信以后的学习生活会蒸蒸日上吧