当前位置: 首页 > 知识库问答 >
问题:

有没有递归的方法可以从开头或结尾删除最大值?

葛学民
2023-03-14

我正在检查列表是否已排序,如果已排序,则返回false,如果未排序,则从开头或结尾删除列表中的maxNumer,不是在中间,而是在结尾或开头no例如[1,2,3,4] expected false [9,1,2,3,4,6,22] // expected [1,2,3,4,6]谢谢。

public class Solution {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();

        list.add(9);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(22);
        var r = find132pattern(list);

        
    }

    
   public static boolean find132pattern(List<Integer> list) {

    int count = 0;
    String result = "";
    for(int i = 0; i < list.size(); i++){
        int prev = i-1;
        int next = list.get(i);
        if(prev > -1){
            prev = list.get(i-1);
            if(prev > next){
                count+=1;
            }
        }
    }
    if(count > 0){
        result+="not sorted";
    }else {
        result+="sorted";
    }

    Integer start = 0;

    Integer end = list.size();

    Integer maxNum = Collections.max(list);

    Integer maxPos = list.indexOf(maxNum);

    
    if(result == "sorted"){
        return false;
    }else if(result == "not sorted" && maxPos == end || maxPos == start){
        list.remove(maxPos);
        find132pattern(list);
    }else {
        System.out.println(list);
    }
       
    
 return false;
}
    
}


// find an element

共有1个答案

漆雕成弘
2023-03-14

在递归中存储最大元素的索引,最后将其删除。

List<Integer> RemoveBiggestFromList(List<Integer> list, int index, int maxIndex){
    if(index >= list.size()) {
        if(list.size() > 0) list.remove(maxIndex);
        return list;
    }
    else{
        if(list.get(index) > list.get(maxIndex)) maxIndex = index;
        return RemoveBiggestFromList(list, index + 1, maxIndex);
    }
}

然后,只需执行list=RemveBig的FromList(list,0,0)

这是一种递归方法,可以移除最大的元素。

 类似资料:
  • 任务是:给定一个字符串和一个非空子字符串sub,递归计算以sub开头和结尾的最大子字符串,并返回其长度。 示例: 你能看看我的代码,告诉我它有什么问题吗? 它不适用于大小写 → 5 并返回零。

  • 问题内容: 只是好奇地发现:为什么Go编程语言的标准库中没有诸如startswith,endswith等标准函数? 问题答案: 该字符串包中包含HasPrefix和HasSuffix。 play.golang.org

  • 问题内容: 我试图得到这两种递归策略之间的区别。 我被告知的定义如下: 尾递归: 如果调用返回后无需执行任何操作,则调用为尾递归,即当调用返回时,立即从调用函数返回返回的值 Head递归: 当函数的第一条语句是递归调用时,调用是head递归的。 问题答案: 在中,递归调用在发生时先于函数中的其他处理(考虑它发生在函数的顶部或头部)。 在中,情况恰恰相反—处理发生在递归调用之前。在这两种递归样式之间

  • 我试图实现一个二叉查找树使用Java。我想创建的函数之一是删除函数。这将由两个方法组成,一个称为删除,另一个称为getNodeToDelete。getNodeToDelete方法是删除方法的辅助函数。 getNodeToDelete方法是递归的,基本上返回用户希望从树中删除的节点。使用此getNodeToDelete方法返回的节点,非递归删除方法基本上会根据不同情况(例如,它是叶节点还是根节点等)

  • 问题内容: 我使用Gson 库将Java对象转换为Json响应…问题是,在JPA请求之后,由于与其他实体的递归关系,无法转换从DB检索到的对象: 我的源代码: 如您在这里看到的,我做了: 只是通过为coordonneesList中的每个GPS对象设置null来消除递归关系。 您认为这是一个很好的解决方案,或者还有其他更实用的方法吗?谢谢 问题答案: 有一个名为GraphAdapterBuilder

  • 问题内容: 我想使用正则表达式从字符串中删除一些符号,例如: (发生在行的开头和结尾), (仅在一行的开头)。 我的代码有什么问题?看来表达是错误的。如果字符/符号出现在行的开头或结尾(出现一次或多次),如何删除? 问题答案: 如果只想从开头和结尾删除字符,则可以使用该方法。这将给出如下代码: 该方法从字符串的开头和结尾删除参数中给定的字符,仅从开头删除它们,仅从结尾删除它们。 如果您真的想使用正