我有一个几乎排序的值数组28个元素长.我需要找到总和为算法提供的目标值的一组值(或者如果找不到精确的和,则最接近的总和低于目标值).
我目前有一个简单的算法来完成这项工作,但它并不总能找到最佳匹配.它在理想情况下使用一组特定的值工作,但我需要一个更强大,更准确的解决方案,可以处理更多种类的数据集.
该算法必须用C语言编写,而不是用C++编写,并且用于嵌入式系统,因此请记住这一点.
这是我目前的算法供参考.它从可用的最高值开始迭代.如果当前值小于目标总和,则将该值添加到输出并从目标总和中减去该值.重复此过程直到达到总和或用完值.它假设一个几乎提升的排序列表.
//valuesOut will hold a bitmask of the values to be used (LSB representing array index 0, next bit index 1, etc)
void pickValues(long setTo, long* valuesOut)
{
signed char i = 27;//last index in array
long mask = 0x00000001;
(*valuesOut) = 0x00000000;
mask = mask<< i;//shift to ith bit
while(i>=0 && setTo > 0)//while more values needed and available
{
if(VALUES_ARRAY[i] <= setTo)
{
(*valuesOut)|= mask;//set ith bit
setTo = setTo - …
Run Code Online (Sandbox Code Playgroud) 我有一个名为NoteView
extend 的自定义类FrameLayout
.以前,我刚刚使用该库存LinearLayout
并且已经构建了一个XML布局,我希望通过添加整个层次结构(以及其他一些叠加视图,这就是我需要framelayout的原因)来重用NoteView
.
问题是我无法弄清楚如何膨胀XML并将其添加到NoteView
从内部NoteView
类.我可以在初始化完成后添加它,但是我希望能够在我NoteView
从XML实例化或扩充时自动添加该层次结构并自动添加它.
如何FrameLayout
通过从NoteView
类本身添加XML来扩展XML 扩展?
我想打开一个特定类型的文件,我的应用程序已经可以通过电子邮件将其作为附件发送.我需要能够让Android电子邮件应用程序选择我的应用程序下载或打开该特定的文件类型.我无法弄清楚如何设置一个意图过滤器,让我这样做.有谁知道这是怎么做的?
我正在尝试将记录插入到SQLite数据库表中.该表对列"URL"具有唯一约束,并且主键自动增量整数"_id".
我使用insert或replace作为我的冲突解决方案,因为我需要保留新数据.但是,此方法是递增主键并弄乱其他表中的某些外键.
在不更新_id的情况下覆盖记录的最佳方法是什么?
我正在后台线程上读取蓝牙数据流,并将该数据传递给UiThread,以便通过消息处理程序进行处理和显示.可在此处找到该过程的更详细描述.
目前我正在读取InputStream byte[]
并使用Handler.obtainMessage()来获取带有字节数组作为对象争论的消息.
我遇到了数据包覆盖彼此的问题,因为数组没有跨线程锁定,并且在UiThread可以处理之前在后台被覆盖.显而易见的解决方案是将数组复制到新数组并传递该新对象.
问题是这在Android上非常昂贵,我将获得相当连续的数据流.有没有更好的方法将此数据传递给主UiThread?也许通过同步字节数组或更高效的内存复制方式?
我有一个Downloader服务,可以加载从我的数据库运行的下载列表.
然后它创建一个ASyncTask,它将在后台线程中运行下载.
这一切都运行得很好,但问题是我目前没有办法告诉服务该下载器已经完成.我不知何故必须从ASyncTask的onPostExecute函数(在UIThread上运行)发送一条消息.
我不能简单地远程关闭服务,因为当ASyncTask完成时,服务有一些工作要做.
我已经考虑过从服务中注册一个监听器并在onPostExecute中调用它,但我认为这会导致在Task完成之前关闭服务或一些threadlocking问题等问题.
如何从ASyncTask向我的Downloader服务发送消息(如广播意图)?
编辑
这里有一些代码让你对我正在做的事感到困惑.
DownloadService.java(重要位):
public class DownloadService extends Service implements OnProgressListener {
/** The Downloads. */
private List<Download> mDownloads = new ArrayList<Download>(10);
private DownloadTask mDownloadTask;
/** The Intent receiver that handles broadcasts. */
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent) {
DebugLog.i(TAG, "onRecieve" +intent.toString());
handleCommand(intent);
}
};
/* (non-Javadoc)
* @see android.app.Service#onCreate()
*/
@Override
public void onCreate() {
DebugLog.i(TAG, "onCreate");
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
IntentFilter commandFilter = …
Run Code Online (Sandbox Code Playgroud)