Algorithm
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。
示例 1:
输入: nums = [1,2,3,1], k = 3
输出: true
示例 2:
输入: nums = [1,0,1,1], k = 1
输出: true
示例 3:
输入: nums = [1,2,3,1,2,3], k = 2
输出: false
思路:滑动窗口+查找表
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_set<int> record;
for(int i = 0; i < nums.size(); i++){
if(record.find(nums[i]) != record.end()){
return true;
}
record.insert(nums[i]);
if(record.size() == k+1)
record.erase(nums[i-k]);
}
return false;
}
};
Review
We introduce a novel neural network quantization method that compresses network weights to ternary values. We introduce two trained scaling coefficients and for each layer and train these coefficients using back-propagation. During training, the gradients are back-propagated both to the latent full-resolution weights and to the scaling coefficients. We use layer-wise thresholds that are proportional to the maximum absolute values to quantize the weights. When deploying the ternary network, only the ternary weights and scaling coefficients are needed, which reducing parameter size by at least . Experiments show that our model reaches or even surpasses the accuracy of full precision models on both CIFAR-10 and ImageNet dataset. On ImageNet we exceed the accuracy of prior ternary networks (TWN) by 3%.
我们介绍了一种新的神经网络量化方法,它将网络权重压缩为三值。我们为每一层引入了两个经过训练的缩放系数和,并使用反向传播训练这些系数。在训练期间,梯度反向传播到潜在的全分辨率权重和缩放系数。我们使用与最大绝对值成比例的分层阈值来量化权重。在部署三元网络时,只需要三元权重和缩放系数,这至少会使参数大小减少。实验表明,我们的模型在CIFAR-10和ImageNet数据集上达到甚至超过了全精度模型的精度。在ImageNet上,我们将先前三元网络(TWN)的准确度提高了3%。
Tips
编写一个日期格式转换程序,输入若干个日期,每行一个,要求全部转换为“mm-dd-yyyy”格式输出。输入的
日期格式可以是“2011.12.24”(中式格式),也可以是“Dec 24 2011”(西式格式)。要求该程序对于以下输入数
据:
Dec 3 1990
2011.2.3
458.12.1
Nov 4 1998
Feb 12 2011
输出结果应为:
12-03-1990
02-03-2011
12-01-0458
11-04-1998
02-12-2011
编写这个程序时,如果输入的是中式格式,就用 cin>>year(假设 year 是 int 类型变量)读取年份,然后再读取后面的内容;如果输入是西式格式,就用 cin>>sMonth(假设 sMonth 是 string 类型对象)读取月份,然后读取后面的内容。
可是,如果没有将数据从输入流中读取出来,就无法判断输入到底是哪种格式。即便用 cin.get() 读取一个字符后再作判断,也很不方便。例如,在输入为 2011.12.24 的情况下,读取第一个字符 2 后就知道是格式一,问题是输入流中的已经被读取了,剩下的表示年份的部分只有 011,如何将这个 011 和前面读取的 2 奏成一个整数 2011,也是颇费周折的事情。使用 peek() 函数很容易解决这个问题。
代码如下:
#include
#include
#include
#include
using namespace std;
string Months[12] ={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
int main() {
int c;
while((c = cin.peek()) != EOF){
int year, month, day;
if(c>='A' && c<='Z'){
string sMonth;
cin >> sMonth >> day >> year;
for(int i=0; i<12; ++i)
if(sMonth == Months[i]){
month = i+1;
break;
}
}else{
cin >> year;
cin.ignore()>>month;
cin.ignore()>>day;
}
cin.ignore();
cout<< setfill('0')<<setw(2)<<month;
cout<<"-"<<setw(2)<<day<<"-"<<setw(4)<<year<<endl;
}
return 0;
}
Share
非暴力沟通四要素:观察,感受,需要,请求。
观察强调,把自己的观察和评论分开。
举个例子:你看到别人双十一买了很多东西,也许你会说“你太浪费钱了!”,可是,“浪费钱”是一个评论,不是一个观察。
如果按照非暴力沟通的模式,你应该说:“我看到你又买了很多东西,我觉得你有点浪费钱了。”是不是感觉有点别扭?
这是因为,我们习惯的处理方式,都是用评价来表达意见的。评价也许并不是事实,而是我们在加工事实的基础上所形成的意见。
如果你和别人说“你太浪费钱了”的时候其实也再说:“我有权利评价你,你需要接受我的意见,不可以浪费钱!”。但也许对方会反抗:“我哪有浪费钱?都是我需要的东西啊!关你什么事?”
所以观察,就是强调把“我的意见”和事实分开。评价是我的东西,是我对事情的意见,而观察才是我们能共享的事实。而我们要做的,是讲我们的观察,而不是评价。
感受就是要表达我的情绪,而不是我的想法。你遇到了不公平的事情,觉得很沮丧,委屈。如果你和另外一个人说,“我很委屈”,对方的第一反应,应该不是来批判你,而是去了解你,安慰你。这就是为什么我们要表达自己的感受。
这同样和我们日常习惯不同。当只有在最放松和最亲的人面前我们往往才会表达自己的感受。
加入你和不太熟的人自己委屈,而别人笑着说,你委屈关我什么事,你肯定很受伤。这就是表达感受很难的原因,你怕受伤。你怕把自己脆弱的地方暴露给别人,怕得到的是不真诚的对待。
你遇到不公平的事情,你很失望,并不是你遇到的这个事情本身导致,而是你的需求没有得到满足。
所以在表达感受的时候,把“我的感受”和“你的行为”分开,就能避免“全都是你的错”的思维误区,从而进一步促进沟通。
我们越是对自己的需要不确信,就越容易在提出需要之前,用长篇大论来说明我所提的需要是合理的。这时候,我们很容易陷入一种自我辩护的立场。
你上了一天的班,很累,回到家想找另一半帮你做点事情,你可以说“我很累了,能不能来帮帮我?”,而不是说:“我都干了一天活了,累死了,你就不能帮帮我?”,后一种表达,已经是一种指责。而你的另一半也可能会说“我也上班啊,我就不累吗?”这样的不好沟通的回答。
我们这样做的时候,聚焦的重点不是自己的需要,而是对方的反应,我们在想怎么去说服他,而不是表达自己的需要。
所以,提需要就是要把自己的需要和对方的期待分开,只关注自己的需要,恰恰能促进合作。
请求不是命令,提出请求是我们自己的事情,别人答应与否,是别人的事情。千万不要以命令的形式对对待别人。不要让别人觉得:如果不答应的话就会受到惩罚。这样不好。