我知道这个算法的大O复杂性O(n^2)
,但我不明白为什么.
int sum = 0;
int i = 1; j = n * n;
while (i++ < j--)
sum++;
Run Code Online (Sandbox Code Playgroud)
即使我们j = n * n
在开始时设置,我们在每次迭代期间递增i并递减j,所以迭代的结果数量是否应该小于n*n
?
algorithm complexity-theory big-o time-complexity asymptotic-complexity
我需要编写一个使用Java的递归方法,称为power,它接受一个双x和一个整数n并返回x ^ n.这是我到目前为止所拥有的.
public static double power(double x, int n) {
if (n == 0)
return 1;
if (n == 1)
return x;
else
return x * (power(x, n-1));
}
Run Code Online (Sandbox Code Playgroud)
此代码按预期工作.但是,我正在努力加倍努力并执行以下可选练习:
"可选挑战:当n为偶数时,你可以使用x ^ n =(x ^(n/2))^ 2来提高这种方法的效率."
当n是偶数时,我不确定如何实现最后一个公式.我不认为我可以使用递归.我试图实现以下内容,但它也不起作用,因为我不能把一个双倍的功能.
if (n%2 == 0)
return (x^(n/2))^2;
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?我觉得我错过了一些明显的东西.所有帮助赞赏.
我需要编写一个delete()
带有int参数k 的方法,并删除链表中的第k个元素(如果存在).我也想看看列表是空的,还是k超出界限.如果其中任何一个都是真的,我想扔一个NullPointerException
.我到目前为止的代码如下.
public void delete(int k){
Node current = head;
for (int i = 0; i < k; i++){
if(head == null && current.next == null){
throw new NullPointerException();
}
else
{
current = current.next; // Move pointer to k position
}
}
remove(current.item);
--N;
}
Run Code Online (Sandbox Code Playgroud)
当我用一个我知道将为null的值执行它时,我得到以下输出:
Exception in thread "main"
java.lang.NullPointerException
at hw4.LinkedList.delete(LinkedList.java:168)
at hw4.LLTest1.main(LLTest1.java:23)
Run Code Online (Sandbox Code Playgroud)
但是,如果我throw new NullPointerException();
从我的代码中删除该行,我仍然会在执行代码时得到相同的错误消息,其中我知道该值将为null.
我的问题是,我throw new NullPointerException();
是否正确地执行了命令,如果没有,我该如何修复它的实现呢?
我正在尝试编写模拟拼字游戏的代码.我设计了一个应该模拟拼字游戏包的类,我试图通过在选择随机磁贴后在main中打印tileID来测试它.每当我运行代码时,我不断收到以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: bound must be positive
at java.util.Random.nextInt(Random.java:388)
at hw3.RandomBag.randomPick(RandomBag.java:39)
at hw3.RandomBag.main(RandomBag.java:59
有人能告诉我为什么我收到这个错误吗?
import java.util.*;
public class RandomBag<E> implements Iterable<E> {
// instance varibles
private List<E> bag; // arraylist as the container
private Random rand; // random number generator
// constructors
public RandomBag() {
bag = new ArrayList<E>();
rand = new Random();
}
public RandomBag(int seed) {
bag = new ArrayList<E>();
rand = new Random(seed);
}
// returns the size of the bag
public int size() …
Run Code Online (Sandbox Code Playgroud) 下面的代码打印为真。
public static void main(String[] args) {
Boolean test = false;
test = true;
System.out.println(test);
Run Code Online (Sandbox Code Playgroud)
如果布尔值在 Java 中是不可变的,我如何将测试从 false 更改为 true?它不应该给我一个错误吗?
我有一个阵列 int [] nums = {5, 1, 6, 10, 4, 7, 3, 9, 2}
我想在O(n ^ 2)时间内找到该数组中最小和最大数字之间的距离.根据分配的要求,它需要是O(n ^ 2)时间.为此,我正在编写一个名为的方法quadratic
.到目前为止,我已经提出了以下代码.
public static int quadratic(int[] nums) {
int max = nums[0];
int min = nums[0];
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length; j++) {
if (nums[i] > nums[j])
max = nums[i];
else if (nums[i] < nums[j])
min = nums[i];
}
}
int maxDifference = max - min;
return maxDifference; …
Run Code Online (Sandbox Code Playgroud) 我有一个文本文档,如下所示:
2 2 1 4 2 8
2 4 1 4 2 8
2 6 1 4 2 8
Run Code Online (Sandbox Code Playgroud)
我想找到第二列(2,4,6)中所有数字的平均值.我写了一个我认为应该这样做的循环.totalVal是加在一起的所有数字的总值,totalNum是数字的总数.
String line = data.nextLine();// read one line into a String
while (data.hasNextLine()) {
String[] field = line.split(" ");
totalVal += Double.parseDouble(field[1]);
totalNums += 1;
line = data.nextLine();
}
System.out.println(totalVal / totalNums);
Run Code Online (Sandbox Code Playgroud)
问题是,我得到的答案返回值3,这意味着它只取文档中前两行文本的平均值,并省略第三行.
有人可以告诉我如何更改循环以便它在第三行文本中添加值吗?
我想复制一个数组.通常,我会做这样的事情.
int[] a1 = {1, 2, 3};
int[] a2 = a1
Run Code Online (Sandbox Code Playgroud)
最近,我看到我的教授这样做:
int[] ar1 = {1, 2, 3};
int[] ar2 = Arrays.copyOf(ar1);
Run Code Online (Sandbox Code Playgroud)
这样做比另一种方式有优势吗?主要区别是什么?
我只是想编写一个比较学生姓名和部分的equals方法.如果名称和部分相同,则equals方法应该打印为true.否则它应该打印错误.
以下是我到目前为止的情况.
public class Student {
private String name;
private int section;
public Student(String name, int section) {
this.name = name;
this.section = section;
}
public boolean equals(Object y) {
if (this.name.equals(y.name) && this.section.equals(y.section)) {
return true;
}
else {
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误是y.name
和y.section
.Eclipse告诉我name
并且section
无法解析为某个字段.
我的问题是,有人可以告诉我如何修复我的代码,以便我可以使用.equals()方法比较学生姓名和部分吗?
我正在尝试制作一个比较器,我可以用它来按自然顺序对字符串进行排序.我希望比较器是通用的,这样我就可以通过它传递来自任何类的字符串.
例如,我有一个Name
实现可比较的类,使得Name
字符串的自然顺序是字符串的长度.但是,在某些情况下,我希望Name
字符串按其自然顺序排序.为此,我在下面写一个比较器.
import java.util.Comparator;
public class AlphabeticalOrderComparator implements Comparator<T> {
public int compare(T obj1, T obj2) {
Name name1 = (Name)obj1;
Name name2 = (Name)obj2;
return name1.name.compareTo(name2.name);
}
Run Code Online (Sandbox Code Playgroud)
我得到的代码错误是它告诉我T无法解析为一个类型.我相信问题出在我的类型转换T
上Name
.
谁能告诉我如何解决这个错误?
java ×8
algorithm ×2
arrays ×2
big-o ×1
boolean ×1
casting ×1
comparator ×1
equals ×1
immutability ×1
linked-list ×1
random ×1
recursion ×1
while-loop ×1