假设有一个像下面那个需要存储在数组中的二叉树.
7
/ \
1 10
/\
9 11
Run Code Online (Sandbox Code Playgroud)
我发现在数组中存储节点的公式从将根节点存储在位置0开始,然后对于索引处的每个节点i,其子节点都放在索引处(i*2)+1 and (i*2)+2.如果任一子array.length - 1节点的索引大于,那么该节点没有子节点.
所以我首先将7放在0位置,然后将其子1和10放在位置i2 + 1和i2 + 2位置为1和2:
|7|1|10| | | |
0 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
现在,我坚持使用没有任何孩子的节点1.我应该把它作为孩子们怎么样?
可以设置一些表示缺少节点的默认值,例如-1,如下所示:
|7|1|10|-1|-1|9|11|
0 1 2 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud) 我有一个类使用 AudioTrack 生成每个特定频率的声音。一切正常,但现在我想自定义它,以便我只能在耳机的右侧或仅在耳机的左侧播放声音。(右耳或左耳)
所以我发现AudioTrack有一个这样的方法:setStereoVolume()但是,当我配置它时,例如这样:audioTrack.setStereoVolume(1.0f, 0.0f),我期望只有我的耳机左侧应该发声,右侧应该静音,但它没有效果。我可以在耳机的左右两侧听到相同音量的声音。
我检查了 的返回值,setStreamVolume()它是 0,这与 SUCCESS 相等,但我仍然没有听到区别。
你知道为什么它不起作用,或者我可以指定如何指定只在耳机的左侧或右侧播放声音的替代方法?
这是生成声音的代码:
public class SoundGenerator extends AsyncTask<Float, Void, Void> {
final int SAMPLE_RATE = 11025;
boolean playing=false;
@Override
protected Void doInBackground(Float... params) {
float frequency=params[0];
int minSize = AudioTrack.getMinBufferSize(SAMPLE_RATE,
AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT);
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT, minSize,
AudioTrack.MODE_STREAM);
short[] buffer = new short[minSize];
float angular_frequency = (float) (2 * Math.PI) * frequency / SAMPLE_RATE;
float angle = 0;
audioTrack.play();
int stereo=audioTrack.setStereoVolume(1.0f, …Run Code Online (Sandbox Code Playgroud) 我开始与Haskell一起玩,并遇到了以下sum函数的实现:
sum [] = 0
sum (x:xs) = x + sum xs
Run Code Online (Sandbox Code Playgroud)
然后有一个解释,显示函数在一个真实的例子中的行为:
sum [1,2,3]
1 + (sum [2,3])
1 + (2 + sum [3])
1 + (2 + (3 + sum []))
1 + (2 + (3 + 0))
= 6
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么每次sum [x]调用时,列表都会减少1个元素?
我唯一的假设是,当构造(x:xs)执行时,x列表的元素不仅被检索,而且被删除(类似于栈pop()方法.),但我不确定这一点.
只要打开应用程序,如果可以的话,不应该允许用户更改设备的音量?
我发现您可以使用AudioManger将音量设置为静音:
AudioManager volumeControl = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
volumeControl.setStreamMute(AudioManager.STREAM_MUSIC, true);
Run Code Online (Sandbox Code Playgroud)
然而,这不是我想要的.我希望当用户进入应用程序以锁定其当前音量并且不允许更改它时,我在后台播放旋律时增加音量.(这就是为什么我不想让用户控制音量的原因)
我在想是否有可能覆盖音量增大,音量减小键?就像我们可以覆盖后退按钮一样.