我一直在努力解决这个面试问题,要求对一个字符串进行洗牌,以便没有两个相邻的字母是相同的.例如,
ABCC - > ACBC
我想到的方法是
1)迭代输入字符串并将(字母,频率)对存储在某个集合中
2)现在通过拉出我们不仅仅拉动的最高频率(即> 0)字母来构建结果字符串
3)每当我们拉信时更新(减少)频率
4)如果所有字母的频率为零,则返回结果字符串
5)如果我们只剩下一个频率大于1的字母,则返回错误
通过这种方法,我们可以为最后一个保存更珍贵(不太频繁)的字母.但为了实现这一点,我们需要一个集合,让我们可以有效地查询密钥,同时有效地按值对其进行排序.喜欢的东西这会工作,除了我们需要保持每个字母检索排序后的集合.
我假设是Unicode字符.
关于使用什么集合的任何想法?还是另一种方法?
题:
从字符串中删除额外的括号。
例如
((a+b))*c => (a+b)*c
(a+b)+c => (a+b)+c
((a+b)/(c+d)) => ((a+b)/(c+d))
(a+(((b-c)))*d) => (a+(b-c)*d) and so on.
Run Code Online (Sandbox Code Playgroud)
我提出了以下解决方案:
方法:我扫描字符串并记住(使用地图)左括号的索引以及它是否是额外的(默认情况下它是额外的)。如果我找到一个右括号,我会从地图中检查相应的左括号,如果它是多余的,则将两者都删除。
void removeExtraParentheses(string& S){
map<int, bool> pmap;
for(int i = 0; i < S.size(); i++){
map<int, bool>::iterator it;
if(S.at(i) == '('){
pmap[i] = true;
}
else if(S.at(i) == ')'){
it = pmap.end();
it--;
if(!(*it).second){
pmap.erase(it);
}
else{
S.erase(S.begin() + i);
S.erase(S.begin() + (*it).first);
pmap.erase(it);
i = i - 2;
}
}
else{
if(!pmap.empty()){
it = pmap.end();
it--;
(*it).second= false;
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试格式化我正在屏幕上打印的一些输出.这是我的代码:
someString = someList[someIndex] + '{0:<8}'.format('\t') + someList[someOtherIndex]
print someString
Run Code Online (Sandbox Code Playgroud)
我的预期输出:
abcdefghi someOutput abcde someOtherOutput **OR** abcdefghi someOutput abcde someOtherOutput
实际输出我得到:
abcdefghi someOutput abcde someOtherOutput
问题1:为什么我没有得到预期的输出?具体来说,为什么第二列中的条目不对齐?
问题2:我应该在代码中更改什么才能获得预期的输出?
附加信息:我使用的是Python 2.6
感谢任何帮助.
我正在尝试以下代码:
unsigned long * foo = (unsigned long *) 0x200000;
Run Code Online (Sandbox Code Playgroud)
所以,据我所知,foo指向无符号长0x200000.现在,如果我尝试,
std::cout<<foo[0];
Run Code Online (Sandbox Code Playgroud)
我认为这应该打印值0x200000(可能是十进制).因为,foo[0] = *(foo + 0) = 0x200000.但是,它实际上是打印的0.
我在这里缺少什么?
问题:"一种算法,用于查找六位数字的数字,其中前三位数的总和等于最后三位数的总和."
我在一次采访中遇到了这个问题,想知道最好的解决方案.这就是我现在所拥有的.
方法1:当然,蛮力解决方案是检查每个数字(在100,000和999,999之间)的前三位和后三位的总和是否相等.如果是,则递增某个计数器,该计数器保持所有这些数字的计数.
但这会检查所有900,000个数字,因此效率低下.
方法2:由于我们被问到"有多少"这样的数字而不是"哪个数字",我们可以做得更好.将数字分为两部分:前三个数字(从100到999)和后三个数字(从000到999).因此,候选数字的任一部分中的三个数字的总和可以在1到27的范围内.
*std::map<int, int>对于每个部分保持a ,其中key是和,并且值是在相应部分中具有该总和的数字(3位数).
*现在,对于第一部分中的每个数字,找出它的总和并更新相应的地图.
*同样,我们可以获得第二部分的更新地图.*现在通过乘以相应的对(例如,键4的映射1中的值和键4的映射2中的值)并将它们相加,我们得到答案.
在这种方法中,我们最终检查1K数字.
我的问题是我们如何进一步优化?有更好的解决方案吗?
我正在尝试动态添加/删除DOM元素(id ="result").添加似乎工作正常,但删除后元素仍然出现在页面上.
这里发生了什么事?我究竟做错了什么?
这是我的代码:
<!DOCTYPE html>
<html>
<body>
<script>
function clearResult() {
if (document.getElementById("result") != null){
alert("remove #result");
$("#result").remove();
if (document.getElementById("result") != null) {
alert("#result still exists");
}
}
alert("Exiting clearResult");
}
function search() {
clearResult();
if (document.getElementById("result") == null) {
alert("add #result");
$('<table id="result"><tr>I am a table</tr></table>').appendTo('#ex');
}
}
</script>
<div>
<button id="search" onclick="search()" value="Send">Search</button>
</div>
<div id="ex">
@*Add result table here dynamically*@
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 以下是我正在处理的数据示例:
Ei (第一列)是主键.
E0 S0 DT0 V1
E1 S1 DT1 V1
E2 S1 DT2 V1
E3 S1 DT3 V3
Run Code Online (Sandbox Code Playgroud)
我想过滤这个得到:
E0 S0 DT0 V1
E3 S1 DT3 V3
Run Code Online (Sandbox Code Playgroud)
基本上,获取行,如果它们相同,Si则选择具有最高/最大的行Vi.Vi形式为w.xy.z(其中w,x,y,z是整数).
我不知道怎么做到这一点.有什么指针吗?
c++ ×3
algorithm ×2
string ×2
arrays ×1
c# ×1
casting ×1
dom ×1
expression ×1
html ×1
javascript ×1
jquery ×1
map ×1
parentheses ×1
pointers ×1
python ×1
sql ×1
sql-server ×1