一、#20:有效的括号
这个题目,用常规字符串的方法可以做,但是会很繁琐,不停遍历+对比,所以数据结构的方法又来了!
没chuo!用栈stack!
用栈的话 ,思路就比较简单一些,首先判断输入字符串开头元素是否存在右括号,若是有右括号在前,那么直接返回false,如果是左括号就进栈,然后后面再有左括号继续进栈,有右括号则查看是否与栈顶左括号匹配,匹配则栈顶元素出栈,继续匹配下一个右括号,如果遍历完,则判断是否栈为空,如果不为空则返回false,最后这个判断就是为了防止有多个左括号,代码如下:
class Solution {
public:
bool isValid(string s) {
if(s.empty())
return true;
stack<char> sta;
for (int i = 0; i < s.size(); i++)
{
switch (s[i])
{
case ')':
if (!sta.empty() && sta.top() == '(')
sta.pop();
else
return false;
break;
case ']':
if (!sta.empty() && sta.top() == '[')
sta.pop();
else
return false;
break;
case '}':
if (!sta.empty() && sta.top() == '{')
sta.pop();
else
return false;
break;
default:
sta.push(s[i]);
break;
}
}
if(!sta.empty())
{
return false;
}
return sta.size() == 0;
}
};
二、#21:合并两个有序列表
题目要求很容易看出来,就是吧两个本来就数字链表合并后并排序,这个题目也是很简单的,找到两个链表,然后比较从头指针开始的每一个value,将较小值放入新链表,并向后移动一位,直到给定的两个链表有一个的next为空,则开始将另一个链表的后几位接在新链表后面,这里要考虑的是题目给的是有序链表,如果是无序链表则需要先进行排序,链表排序的方式有很多,可以从头到尾一个一个比大小,小值放入新链表,然后回溯比较,直到排序完成。代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* res=new ListNode(0);
ListNode* p=res;
while(l1!=NULL&&l2!=NULL)
{
if((l1->val)<(l2->val))
{
p->next=l1;
l1=l1->next;
}
else
{
p->next=l2;
l2=l2->next;
}
p=p->next;
}
if(l1!=NULL)
{
p->next=l1;
l1=l1->next;
p=p->next;
}
if(l2!=NULL)
{
p->next=l2;
l2=l2->next;
p=p->next;
}
return res->next;
}
};
三、论文
现在主要想找灵感的地方就是光源,所以主要关注论文的光源选择、布置以及打光方式,因为缺陷大概只有1-3mm直径,所有分区域打光拍摄是有必要的,光源布置一定要尽可能放在拍摄区域正中央,而且要通过一层薄膜来把光源柔和并且散射均匀,所以找了很多材料,发现用的比较多的柔光纸和玻璃薄膜,这两种开会要和老师具体协商,分区域打光的方式也需要协商,目前还是数据采集问题比较大,难道真的要在那边待两天一直采集?我可不想。。。这周还得考虑图像采集卡的问题,虽然不是实时传输,但是也得保证有较好的效果,不失真,不然随便失真一下,缺陷就没了。。。
四、基础知识补齐——tensorflow
上次把底层的整个训练过程以及参数作用数学过程模拟了一遍,今天在加训练方式的过程中不是很顺畅,开始用交叉熵和正则的和去优化训练准确率,发现在反向传播中耗时更长,后来换了模型,但是错误报了一连串,debug了几个,没有全部弄完,因为每次训练一遍得10min+,所以调试也是很慢。。。后来解决不了所以就跑过去和我宝玩儿了会儿哈哈哈哈,晚上回来希望能搞定!