自動運転アルゴリズム職場実習簡単面接
5638 ワード
.Using c++ to write a queue. Need support function push(), pop()
答え:
#include
#include
using namespace std;
template
struct Node{
T value;
Node *next;
Node () {next =NULL;}
};
class MyQueue{
private:
unsigned int num;
Node * first;
Node * last;
public:
MyQueue();
~MyQueue();
unsigned int size();
void push();
void pop();
bool empty();
T back();
T front();
};
template
MyQueue::MyQueue()
{
num =0 ;
first = NULL;
last = NULL;
}
template
MyQueue::~MyQueue()
{
while(!empty())
{
pop();
}
}
template
unsigned int MyQueue::size()
{
return num;
}
template
void MyQueue::push(T ele)
{
Node * tmp = new Node;
tmp->next = NULL;
tmp->value = ele;
if(0==this->num)
{
first = tmp;
last = tmp;
}
else
{
last ->next = tmp;
last = tmp;
}
(this->num)++;
}
template
void MyQueue::pop()
{
if(0==this->num)
{
cout < * tmp =first;
first = first->next;
delete tmp;
(this->num)--;
}
}
template
void MyQueue::back()
{
if(0==this->num)
{
cout <value;
}
}
template
void MyQueue::front()
{
if(0==this->num)
{
cout <value;
}
}
. Given a non-empty binary tree, find the minimum path sum.
For this problem, a path is defined as any sequence of nodes
The path must contain at least one node and "does not need to go through the root".
Input: [-10,9,20,null,null,15,7]
-10
/ \
9 -20
/ \
-15 7
Output: -45
----------
/*
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
答え:
void minPathSum(TreeNode* root,int& left, int&right,int &minsum);
int minPathSum(TreeNode* root) {
int minsum = 0;
int left,right;
minPathSum(root, left, right, minsum);
return minsum;
}
void minPathSum(TreeNode* root,int& left, int&right,int &minsum)
{
if(root == NULL)
{
left = 0;
right = 0;
return;
}
int left1,right1,left2,right2;
minPathSum(root->left,left1,right1,minsum);//left subtree
minPathSum(root->right,left2,right2,minsum);//right subtree;
left = root->val;
right = root->val;
if(max(left1,right1)>=0 &&max(left2,right2)>=0)
{
//start a new path
minsum = min(root->val,minsum);
}
if(max(left1,right1)<0)
{
left = left + min(left1,right1);
}
if(max(left2,right2)<0)
{
right = right + min(left2,right2);
}
minsum = min(left+right+root->val,minsum);
}
/**
* ...
*/
-----------
. Compare ORB feature to FAST
答え:
ORB = FAST + BRIEF
ORB FAST .
FAST , , 。
FAST , ,
: , 。
:
1. p, `lp`;
2. T, `0.3*lp`;
3. p , 3 16 ;
4. N `lp+T`, N `lp-T`, p 。
5. , 。
FAST , , 。
,ORB 。
ORB FAST , :
R , 。
BRIEF , 。 :
1. , n `p(i),q(i)(i=1,2...,n)`;
2. l, `l[p(i)]>l[q(i)]`, 1, 0;
3. , 。
n 128,256 512.
ORB BRIEF , , , 。
ORB 。
FAST BRIEF , ORB SLAM 。
タイトル1:入力した浮動小数点数xに対して、√xの値を二分法で解く.
#DEFINE PREC 0.0001
float func1(float x)
{
if(x<=0)
{
return 0;
}
if(x=1)
{
return 1;
}
float begin = 0;
float end = x;
float middle =x/2;
while(middle*middle>x+PREC ||middle*middlex-PREC )
{
end = middle;// ,
}
}
return middle;
}
題目2:ひとつの環の上でN個人がいて、番号は0,1,2,3…N-1です.0から数え始め、Kに届いた人がアウトになったとき、残りの人は続けて報告します.全員がアウトになるまで、与えられたNとKに対して、順次アウトの番号が出力される.
// , int , print
int getnum(int N, int K)
{
if(N ==1)
{
return 1;
}
int out = (N+K-1)%N-1;
return (getnum(N-1,K)+K-1)%N+1;
}
int answer(int N, int K)
{
List lst;
for(int i = 0; i::iterator iter = lst.begin();
while(lst.size()>1)
{
for(int i = 0 ; i::iterator iterdel = iter ;
if(++iter==lst.end())
{
iter = lst.begin();
}
lst.erase(iterdel);
}
return *iter;
}
void func2(int N, int K)
{
if(N ==1)
{
cout<
题目3:正の整数が3つあるので、それらの间にプラスマイナス乗除で0が得られるかどうかを判断し、YESを出力することができ、そうでなければNOを出力することができる.//四則演算判断は0を得ることができますか?列挙しますか?再帰を使うかもしれませんが、考えられません...
void func3(int a, int b, int c)
{
if(a==b||a==c||b==c)
{
cout<