这些是C代码的一些部分,用于使用开放地址来实现哈希图。我不明白insert函数中的while循环正在检查什么,twoSum函数中的if语句正在检查什么。
是否执行while循环条件检查该值是否在数组中或该值不为null。 if语句是否检查值是否不为0?我不明白
我一直认为这样的事情就像需要手动中断的while(1)循环一样工作。
我想知道我理解主体的条件是该循环警戒声明的条件。
void insert(int *keys, int *values, int key, int value) {
int index = hash(key);
while (values[index]) { // What does this check for?
index = (index + 1) % SIZE;
}
keys[index] = key;
values[index] = value;
}
int* twoSum(int* nums, int numsSize, int target) {
int keys[SIZE];
int values[SIZE] = {0};
for (int i = 0; i < numsSize; i++) {
int complements = target - nums[i];
int value = search(keys, values, complements);
if (value) { // What does this line check for?
int *indices = (int *) malloc(sizeof(int) * 2);
indices[0] = value - 1;
indices[1] = i;
return indices;
}
insert(keys, values, nums[i], i + 1);
}
return NULL;
}
答案 0 :(得分:0)
我们只能猜测。
看起来像 import React from 'react';
import { makeStyles } from '@material-ui/styles';
import Button from '@material-ui/core/Button';
const useStyles = makeStyles({
root: {
background: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)',
border: 0,
borderRadius: 3,
boxShadow: '0 3px 5px 2px rgba(255, 105, 135, .3)',
color: 'white',
height: 48,
padding: '0 30px',
},
});
export default function Hook() {
const classes = useStyles();
return <Button className={classes.root}>Hook</Button>;
}
期望指向始终具有最终值为零的最终元素的数组的指针,该函数的设计者已选择该约定来表示“数组的末尾”
看起来像 insert
在搜索失败时返回零。
但是,任何一个都可能是一个错误(我很怀疑,因为此设计禁止将零视为“真实” /有效值),而且两者都是不好的设计-在前一种情况下,为什么不通过数组大小作为参数吗?在后一种情况下,为什么不像其他C API一样返回search
并将结果(如果成功)作为“输出参数”给出呢?
最终,我们无法神奇地知道函数的先决条件,因此您将不得不询问编写该函数的人。
这就是为什么代码应该带有解释性注释的原因。