Viv*_*hta 2 java arrays long-integer
最近我参加了一次采访,我被要求编写一个函数来查找数字中的术语及其出现的次数.
让我们说term = 51,number = 164518351,所以51确实退出数量并且它发生了2次,所以返回2.
我的解决方案 - 将数字和术语转换为字符串,并在数字字符串中将术语字符串替换为"A",然后最后计算数字字符串中的"A"数.他让我在不使用字符串的情况下解决,所以我采用了数组方法.
但他说我也不能使用数组.所以我想知道是否有其他方法可以做到这一点?我不想要确切的代码或算法,我只想知道我们可以采用各种方法来解决这个问题,而且时间复杂度最低.
你可以尝试这样的事情
int term_count = 0;
while(number > 0){
if(number % 100 == term)
term_count++;
number = number/10
}
Run Code Online (Sandbox Code Playgroud)
这将检查数字的最后两位是否等于该项,并继续这样做,忽略该数字的每个单位数字.
这样的事情
164518351%100 == 51
16451835%100 == 51
1645183%100 == 51
164518%100 == 51
....
当然,在这里,我知道这个术语是两位数,所以我修改为100.如果你不知道,你可以找到术语中的位数,然后修改数字
10 ^(num_of_digits_in_term)
你可以找到像这样的位数
int tempTerm = term, termDigitCount = 0;
while(tempTerm > 0){
termDigitCount++;
tempTerm /= 10;
}
// 51 > 0 -> termDigitCount = 1
// 1 > 0 -> termDigitCount = 2
// 0 > 0 -> exit while loop
Run Code Online (Sandbox Code Playgroud)
最后,如果term_count为0,则数字中没有出现该术语
希望这可以帮助.
PS - 解决方案可能在语法上不正确,因为OP不想要一个确切的答案.只是逻辑.
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |