这次的题目挺简单~不过知识点却也很丰富啦!
12.词频统计
题目描述
请设计一个高效的方法,找出任意指定单词在一篇文章中的出现频数。
给定一个string数组article和数组大小n及一个待统计单词word,请返回该单词在文章中的出现频数。保证文章的词数小于等于1000。
感受:一开始看这题目已知条件这样给不也很简单吗,几行代码就出来了,不过要是用字典树(Trie)实现的话,会很有收获哦!
Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。但它的内存消耗确实太过庞大,如果文本里的单词里字母种类偏少而单词很多,那有很多开辟出来的空间是没有被利用的。不过却非常适合搜索引擎系统用于文本词频统计。因为最大限度地减少无谓的字符串比较,查询效率比哈希表高。所以我觉得,针对不同情况,要使用不同的数据结构才能达到更好的效果!
class Frequency {
public:
int getFrequency(vector<string> article, int n, string word) {
// write code here
int count=0;
for(int i=0;i<n;i++)
{
if(article[i]==word)
count++;
}
return count;
}
};
字典树实现的代码~
https://www.nowcoder.com/questionTerminal/ebff2814640a48fdb0d9690677f7c7de
14.无判断max
题目描述
请编写一个方法,找出两个数字中最大的那个。条件是不得使用if-else等比较和判断运算符。
给定两个int a和b,请返回较大的一个数。若两数相同则返回任意一个。
测试样例:
1,2
返回:2
感受:很有意思的一题,一开始想了个法子,用绝对值abs来做,但觉得abs里面应该也有用到判断,所以移位可能是比较好的方法了,但暂时不知有没有更好的办法。
class Max {
public:
int getMax(int a, int b) {
// write code here
b = a-b;
a -= b&(b>>31);
return a;
}
};
15.井字棋
题目描述
对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。
给定一个二维数组board,代表当前棋盘,其中元素为1的代表是当前玩家的棋子,为0表示没有棋子,为-1代表是对方玩家的棋子。
测试样例:
[[1,0,1],[1,-1,-1],[1,-1,0]]
返回:true
感受:在游戏里应该会用到这样的算法吧~
class Board {
public:
bool checkWon(vector<vector<int> > board) {
// write code here
if(board[0][0]==1 && board[0][0]==board[1][1] && board[0][0]==board[2][2] )
return true;
else if(board[0][2]==1 && board[0][2]==board[1][1] && board[0][2]==board[2][0] )
return true;
else
{
for(int i=0;i<3;i++)
{
if(board[i][0] == 1 && board[i][1] ==1 && board[i][2] == 1)
return true;
if(board[0][i] == 1 && board[1][i] ==1 && board[2][i] == 1)
return true;
}
}
return false;
}
};