小编Man*_*iri的帖子

计算二叉树中所有节点的节点深度

我正在尝试解决Algoexpert 的节点深度问题。该问题要求您计算给定二叉树中所有节点的深度总和。例如,给定这棵树 -

          1
       /     \
      2       3
    /   \   /   \
   4     5 6     7
 /   \
8     9
Run Code Online (Sandbox Code Playgroud)

总和应该是 16。

我为其编写了一个递归解决方案,我认为这是正确的,但有趣的是,只有第一个测试通过,而其余测试用例失败。这是我的解决方案-

import java.util.*;

class Program {

  // static variable to hold the final sum
  private static int finalSum = 0;

  public static int nodeDepths(BinaryTree root) {
        // Write your code here.
        int runningSum = 0;
        depthHelper(root.left, runningSum);
        depthHelper(root.right, runningSum);
        return finalSum;
  }
    
    private static void depthHelper(BinaryTree node, int runningSum) {
        if(node == null) return;
        runningSum++;
        finalSum …
Run Code Online (Sandbox Code Playgroud)

java algorithm recursion binary-tree

3
推荐指数
1
解决办法
858
查看次数

如何在java中创建一个对同一包中的其他类不可见的(私有)类?

我正在研究 Java 中的继承,我正在学习的书使用一个Employee类来解释几个概念。由于同名的 java 文件中只能有一个(公共)类,并且该类创建另一个类的对象,因此我必须在同一个文件中定义一个 Employee 类,而不使用修饰符public。我的印象是,在同一个 java 文件中的另一个类主体之后以这种方式定义的类对于同一包中的其他类不可见。下面是用于演示的示例 Java 代码:

package book3_OOP;

public class TestEquality3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Employeee emp1 = new Employeee("John", "Doe");
        Employeee emp2 = new Employeee("John", "Doe");

        if (emp1.equals(emp2))
                System.out.println("These employees are the same.");
        else
            System.out.println("Employees are different.");


    }

}

class Employeee {
    private String firstName, lastName;

    public Employeee(String firstName, String lastName) {

        this.firstName = firstName;
        this.lastName = lastName;

    }

    public …
Run Code Online (Sandbox Code Playgroud)

java oop nested-class

2
推荐指数
1
解决办法
5381
查看次数

如何在printf占位符中使用等于表达式?

我有以下代码片段:

main( )
{
int k = 35 ;
printf ( "\n%d %d %d", k == 35, k = 50, k > 40 ) ;
}
Run Code Online (Sandbox Code Playgroud)

产生以下输出

0 50 0
Run Code Online (Sandbox Code Playgroud)

我不知道我理解的第一个值怎么printf0.当值k与之比较时35,理想情况下它应该返回(并因此打印)1,但它如何打印为零?产生的其他两个值 - 50并且0都是正确的,因为在第二个值中,k的值被视为50,而对于第三个值,k的值(即35)被比较40.因为35 < 40,所以它打印0.

任何帮助将不胜感激,谢谢.

**更新**

在研究了关于这个主题的更多内容之后undefined behavior,我在一本关于C的书中看到了这一点,最后给出了源代码.

调用约定 调用约定表示在遇到函数调用时参数被传递给函数的顺序.这里有两种可能性:

  1. 参数可能从左向右传递.
  2. 参数可能从右到左传递.

C语言遵循第二顺序.

考虑以下函数调用:

fun (a, b, c, d ) ;
Run Code Online (Sandbox Code Playgroud)

在这个调用中,参数是从左向右还是从右向左传递并不重要.但是,在某些函数调用中,传递参数的顺序成为一个重要的考虑因素.例如:

int a = 1 ;
printf …
Run Code Online (Sandbox Code Playgroud)

c printf equality undefined-behavior assignment-operator

1
推荐指数
1
解决办法
420
查看次数

XOR 运算仅返回整数数组中的非对元素

我在解决 Hackerrank 上的挑战时遇到了这个问题。

\n\n
/*\nProblem Statement\n\nThere are N integers in an array A. All but one integer occur in pairs. Your task is to find the number that occurs only once.\n\nInput Format\n\nThe first line of the input contains an integer N, indicating the number of integers. The next line contains N space-separated integers that form the array A.\n\nConstraints\n\n1\xe2\x89\xa4N<100 \nN % 2=1 (N is an odd number) \n0\xe2\x89\xa4A[i]\xe2\x89\xa4100,\xe2\x88\x80i\xe2\x88\x88[1,N]\nOutput Format\n\nOutput S, the number that occurs only once.\n*/\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在这种情况下编写的正常解决方案结果非常复杂,有很多嵌套的 if 循环。经过一番搜索,我发现这个解决方案通过简单地将整数数组中的所有元素相互异或来解决问题,结果是孤独的整数。

\n\n …

arrays xor

1
推荐指数
1
解决办法
1761
查看次数

澄清Rails中的Ruby语法

我正在学习Rails,在浏览官方指南时,我遇到了一些我无法理解其含义的代码.

情况1 -

class Person < ApplicationRecord
  validates :name, presence: true
end 
Run Code Online (Sandbox Code Playgroud)

在我看来,这validates是一个采用称为:name参数的符号的方法.但那么,是什么presence?这也是一种方法吗?但如果是,是什么的意义:之后presence.我知道true正在设置的值presence,作为一种验证,需要存在(换句话说).但我对语法不太清楚.

它也可能presence: true只是一个哈希,其中:presence(符号)是键,并且true是值.

案例2 -

class Person < ApplicationRecord
  validates :terms_of_service, acceptance: true, message: 'must be abided'
end 
Run Code Online (Sandbox Code Playgroud)

同样,validates是将符号:terms_of_service作为参数的方法.但其余的呢?它是一个具有2个键值对的哈希,有点像{acceptance: true, message: 'must be abided'}吗?

如果它确实是一个哈希值,为什么validates在每种情况下它都被添加到方法中?为什么不能

validates :terms_of_service
acceptance: true, message: 'must be abided'
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

ruby validation syntax ruby-on-rails

1
推荐指数
1
解决办法
80
查看次数

如何在没有 .reverse() 的情况下反转 16 个或更少字符的 JavaScript 数组?

我正在尝试解决Codewars 上的一个挑战,它要求您在 JavaScript 中反转数组,长度为 16 个字符或更少。使用.reverse()不是一种选择。

您的代码中允许的最大字符数为 28,其中包括函数名称weirdReverse,因此您只有 16 个字符来解决它。约束 -

您的代码需要尽可能短,实际上不要超过 28 个字符

样本输入和输出 -

输入:包含任何类型数据的数组。前任:[1,2,3,'a','b','c',[]]

输出: [[],'c','b','a',3,2,1]

给出的起始代码是-

weirdReverse=a=>
Run Code Online (Sandbox Code Playgroud)

我的解决方案(29 个字符)是 -

weirdReverse=a=>a.sort(()=>1)
Run Code Online (Sandbox Code Playgroud)

这当然失败了 -

代码长度应小于或等于 28 个字符。

您的代码长度 = 29 - 预期:'代码长度 <= 28',而是得到:'代码长度 > 28'

我不确定这里还有什么要截断的。

注意 - 我确实考虑过在CodeGolf SE上发布这个问题,但由于范围有限,我觉得它不适合那里。

javascript arrays reverse

1
推荐指数
1
解决办法
1311
查看次数

C中的逻辑运算符与实际逻辑运算有何不同?

我有以下代码片段,并且基于我对逻辑运算符如何工作的了解,输出有点混淆.据我所知(基于电子学中的真值表),

  1. 对于逻辑AND,TRUETRUE给出TRUE真值表给出的值和所有其他组合FALSE.
  2. 对于逻辑OR,只有FALSEFALSE给出的值FALSE.虽然真值表的所有其他组合给出了TRUE.

基于这些知识,这个第一个代码片段 -

void main( )
{
int i = -1, j = 1, k ,l ;
k = i && j ;
l = i || j ;
printf ( "%d %d\n", i, j ) ;
printf("%d %d", k,l);
}
Run Code Online (Sandbox Code Playgroud)

给出输出 -

-1 1
1 1
Run Code Online (Sandbox Code Playgroud)

我在这里很困惑,因为根据逻辑AND和OR的真值表,k的值应该是-1.这来自以下事实的值i-1(这是FALSE)并且j1(这是 …

c logical-operators

0
推荐指数
1
解决办法
262
查看次数

为什么scanf不接受这个C结构的元素?

我是C的新手,正在研究结构.我创建了一个简单的结构,并尝试通过scanf()结构变量输入输入值,但我只获得部分/垃圾输出.我在这里错过了什么吗?

这是我的原始代码 -

#include<stdio.h>
void main()
{
    struct book
    {
        char name;
        float price;
        int pages;
    };

    struct book b1,b2,b3;
    int i;
    printf("\n Enter the names, prices and no. of pages of the 3 books: \n");
    scanf("%c %f %d", &b1.name,&b1.price, &b1.pages);
    scanf("%c %f %d", &b2.name,&b2.price, &b2.pages);
    scanf("%c %f %d", &b3.name,&b3.price, &b3.pages);   

    printf("\n You have entered: \n");
    printf("%c %.2f %d", b1.name,b1.price, b1.pages);
    printf("%c %.2f %d", b2.name,b2.price, b2.pages);
    printf("%c %.2f %d", b3.name,b3.price, b3.pages);
}
Run Code Online (Sandbox Code Playgroud)

这是一组输出 -

Enter names, prices & …
Run Code Online (Sandbox Code Playgroud)

c struct structure scanf

0
推荐指数
2
解决办法
1149
查看次数