- 浏览: 189967 次
- 性别:
- 来自: 北京
-
最新评论
-
AgBupt:
lz,我这里显示没有ip6config的命令。。。这个咋整啊
MAC中测试IPv6是否正常以及重启启用方法 -
assertivef:
简单可测试的代码,言简意赅。
Java中WeakHashMap类型使用示例 -
yjc2020:
求第几大的数后还要给出其在原数组中的位置,你这个是不是还要再遍 ...
Algorithm 05 : 给定一个数组,寻找第K大的数 -
liuxbgiant:
上面代码有些问题,可以与QQ:447369396交流……
给定一个整数数组,检测是否存在一个和为零的子数组 -
accesine:
lo0 gif0 stf0 en0 en1 fw0 p2p0楼 ...
MAC中测试IPv6是否正常以及重启启用方法
文章列表
问题:请使用C/C++写一个程序实现将一个整数拆分成两个整数的平方和,把所有的可能的组合都要计算出来。
答:假定输入的整数为n,则扫描1-(n的平方根)之间的整数,令row=1,column=(int)(sqrt((double)given)+0.5),使得row*row+column*column=n的数输出即可。
代码如下所示:
//
// main.cpp
// MyProjectForCPP
//
// Created by labuser on 11/2/11.
// Copyright 2011 __MyCompanyName__. All right ...
问题:编写一个能够支持数组快速移位的算法,时间复杂度在O(N)以内。
答:要实现在线性的时间内实现数组的快速移动,就要考虑如何使用逆序算法来达到移动的目的。例如,我要移动的数组元素称为A,剩余的部分称为B,那么原来次序为AB,如何变成BA呢?其实根据倒置的算法是可以实现移位操作的,我们先取A'为A的逆序序列,B'为B的逆序序列,进行(A'B')'操作即可得到BA序列。实现算法如下:
//
// main.cpp
// MyProjectForCPP
//
// Created by labuser on 11/2/11.
// Copyright 2011 __MyCo ...
在处理大数据的排序的时候,位图是经常使用的一种数据结构,在JDK中已经提供了现成的BitSet类,但是如果需要做一些比较简单的应用且能够有效控制程序的效率,还是使用数组实现一个简单的BitArray吧。以下是一个简单BitArray的实现,没有考虑线程安全的问题,适合在不需要多线程并发的情况下使用。
import java.lang.IllegalArgumentException;
public class BitArray {
private int[] bits = null;
private int length;
pr ...
今天在Mac机器上使用了Flex Builder编辑了一个源代码文件,保存后使用vim命令去打开时发现系统自动在每一行的结尾添加了^M符号,其实^M在Linux/Unix中是非常常见的,也就是我们在Win中见过的/r回车符号。由于编辑软件的编码问题,某些IDE的编辑器在编辑完文件之后会自动加上这个^M符号。看起来对我们的源代码没有任何影响,其实并不然,当我们把源代码文件Check In到svn之类的版本控制软件之后,由于之前版本的文件并不存在这个符号,所以开发成员在使用diff工具来查看改动的内容的时候问题出现了,使用diff工具对边两个版本的文件发现这两个文件的每一行都被显示为修改过,严重影响 ...
给定一个无序数组,求数组中第K大的数。
答:求一个数组中第K大数可以借用快速排序算法的思想,主要思路如下:
(1)在数组中随机选择一个数作为支点。
(2)将比作为支点数大的所有数放在这个支点的左边,支点放在数组中间的位置。
(3)设支点左边元素的个数为L,那么可以分以下三种情况:
(a)当K=L的时候,直接返回支点即是所要求的第K大的数。
(b)当K<L的时候,在支点左边的数中继续寻找第K大的数。
(c)当K>L的时候,在支点右边的数中继续寻找第(K-L)大的数。 ...
请定义一个宏,比较两个数a、b的大小,不能使用大于、小于和if语句。
答:
使用两个数的差值和与运算来判断这两个数的大小。
#include <cstdlib>
#include <iostream>
using namespace std;
#define MAX(a,b) (((long)(a-b))&0x80000000)?b:a;
int main(int argc, char *argv[])
{
int a=1000,b=1022;
int maxValue=MAX(a,b);
co ...
使用Java语言编写程序来判断一个整数是不是2的阶次方数,要求使用尽量快速简便的方法。
答:如果一个数是2的阶次方数,那么它的二进制数的首位一般是1,后面接若干位0。比如8就是1000,64是1000000。如果将这个数减1再与该数做&运算,则应该全部位都是0。所以如果一个数d,满足d&(d-1)==0,则这个数必定是可以被2的幂整除的数。
import java.util.Scanner;
public class Valid {
public static boolean doValid(int Number){
...
Question : Give a divide and conquer algorithm for the following problem : you are
given two sorted lists of size m and n, and are allowed unit time access
to the ith element of each list. Given an O(logm+logn) time algorithm for
computing the kth ...
Question : Merge a sorted array of size n into another sorted array of size m+n.
问题:合并两个有序的数组,将一个长度为n的数组插入到指定的长度为m的数组中。
/**
* @author YuHuang
* @vision 2011-10-04
* This program is only for algorithm training.
*
*/
public class MergeArray {
public static void doMerg ...
Question : Reverse a Linked List in groups of given size K.
问题:以K个元素为一组逆转链表。
/**
* @author YuHuang
* @vision 2011-10-03
* This program is only for algorithm training.
*
*/
class Node {
public int data;
public Node next;
}
class LinkedList {
priv ...
Question : To find max sorted contiguous subsequence of an Array.
问题:查找数组中的最长有序子序列。
/**
* @author YuHuang
* @vision 2011-10-03
* This program is only for algorithm training.
*
*/
public class MaxSortedContiguousSubsequence {
private int[] rArray;
public ...
请简述一下Java中线程组的特性。
答:Java中的ThreadGroup类表示线程组,它能够对一组线程进行几种管理。用户创建的每个线程均属于某个线程组。线程组具有以下几点特性:
(1)一旦线程加入某线程组,该线程就一直存在与该线程组直至线程死亡,不能在中途改变线程所属的线程组。假定线程A创建了线程B,如果创建线程B时没有在构造方法中执行线程组,那么线程B会加入到线程A所属的线程中。
(2)当Java应用程序运行时,Java虚拟机会创建名为main的线程组,在默认情况下,所有线程都属于这个线程组。
(3)用户创建的线程组都有一个父亲线程组,在默认情况下,如果线程A创建了一个新的线程组,那 ...
请问如何才能安全地使线程暂停、恢复运行和停止,谈谈你的想法并举例说明。
答:虽然在Java中的Thread类中分别提供了使线程暂停(suspend()方法)、恢复运行(resume()方法)以及停止(stop()方法)的方法,但是使用这些方法会产生如下两点风险:
(1)容易造成死锁。
(2)一个线程强制中断另一个线程的运行,会造成另一个线程操作的数据停留在逻辑上不合理
的状态。
基于上述的原因,Thread类中直接控制线程暂停、恢复和停止的方法已经在JDK 1.2版本之后
被抛弃(Deprecated)。在实际编程中,一般是在受控制的线程中定义一个标志变量,其他线
程 ...
请问在Java中notify()和notifyAll方法有什么区别?
答:Java中notify()和notifyAll()方法的主要区别在于:notifyAll()方法会使原来在某个对象等待池中的线程全部退出wait状态,进入该对象的锁池中,一旦该对象的锁被释放,它们会竞争获取对象的锁。相比之下,notify()方法只会随机选择一个处于wait状态的线程进行唤醒,使这个线程进入该对象的锁池中,当对象的锁被释放后并且该线程获得了CPU运行时间后即被执行,其他线程则保持原来的状态(还处于该对象的等待池中)。
注意:如果一个线程运行完毕后释放对象上的锁,并且没有使用notify()语句,即使该对 ...
请问Java中都提供了哪些控制线程的方法?
答:Thread类中提供了以下几个控制线程的方法:
(1)start()方法,这个方法用于启动线程。
(2)suspend()方法,使线程暂停方法。
(3)resume()方法,使暂停的线程恢复运行的方法。
(4)stop()方法,终止线程的方法。
但是,从JDK 1.2开始,除了start()方法以外,其他3个线程的方法都被抛弃了(Deprecated)。可以使用编程手段控制线程的暂停和结束。
知识扩展:
为什么JDK的后续版本要抛弃suspend()、resume()和stop()方法呢? ...