一周没写过总结了哈哈哈哈哈哈哈手生!
一、#24:两两交换链表中的节点
起手先判断特殊链表,即空链表或者只有一个节点的链表,如果是正常两个或两个以上节点的链表就继续进行,当当前节点以及下一节点不为空时,进行简单的换位操作,换位结束后指针指向下下个节点,也就是一次跳过俩节点继续进行换位操作,直到后面没有节点或者只有一个节点,一道简单题。。。不知道怎么就归到中等题了。。代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head==NULL||head->next==NULL)
{
return head;
}
else
{
ListNode* p=head;
while(p!=NULL&&p->next!=NULL)
{
int tmp=p->next->val;
p->next->val=p->val;
p->val=tmp;
p=p->next->next;
}
return head;
}
}
};
二、#26 删去排序数组中的重复项
这个题还是要先判断特殊情况,判断完了想到两个办法,第一个是认真做的,第二个是不认真做的。。。
认真做的办法是,因为这是个排好序的数组,所以可以用第一个数作为新数组的第一个量,然后遍历输入数组,若相等,则循环下一个,不相等就吧这个新值push_back到新数组中,遍历结束,新数组就是不重复的数组了,然后题目要求是在原数组修改,但是我用了新数组,本以为不行了,但是我把新数组都赋值给了原数组,输出。。。没想到成了,原来他的调用模式是截取返回和长度额数组进行输出,所以我不用管nums后面的数是啥,只要吧前面改成删除后的就行了,这也算是利用题目漏洞解题吧。。。
不认真的办法就比较骚了,利用之前总结过的map,map很大的特点就是key不会重复,那么我用nums[i]的值去作为map的key值,然后value的值随便++就好,那么这样就自动删除了重复的key,因为在有了一个key之后,相同的key不会被写入map容器,然后还是用前面那个方法直接把map的key值一一对应赋值给原数组,进行输出,简单快捷,还骚。。。
能用这两个办法只能说是这个题目漏洞太大。。。第一个方法好懂,所以就贴出第二个方法的代码:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
map<int,int> mymap;
for(int i=0;i<nums.size();i++)
mymap[nums[i]]++;
map<int,int>::iterator it=mymap.begin();
for(int i=0;i<mymap.size();i++)
{
nums[i]=it->first;
it++;
}
int cnt=mymap.size();
return cnt;
}
};
三、kinect使用
这个深度相机是微软好多年前的一款,现在停产了,但是还是深度相机的经典,一直都想玩一下。
这个家伙适配器就有俩,乱七八糟连线有点乱。。。
首先安装官网的SDK,安装这个的时候一定不要连USB,血的教训。。。这个安装主要是为了两个部分,一个是辅助读图像的软件使用测试,一个是kinect的驱动程序,安装完之后一定要重启电脑!!!关机在开是不行的。。。
然后插电源,插u口,打开设备管理器查看驱动是否响应。。。终于响应了 蛋疼死了。。。
然后用SDK Browser检查连接环境是否有问题
之后用kinect studio开打开相机,有图像就表示成功了!
需要配置VS,把库目录,包含目录以及附加依赖项的文件全部写到VS配置中,再配置一下opencv,就可以开始二次开发写程序了!
折腾了很久,研究了kinect的库函数,终于用程序打开相机并拍摄惹!很舒服!以下是深度图(就是效果不咋地,明儿继续调。。。)
上面是我的胳膊和我的表,可以看出来,连表链的孔都不能完全识别出来深度,可以说这种深度相机真的不适合做微小缺陷识别。。。但是也可能是和我调节有关,明儿再试试,不行就周三报告老师了。。。