牛客网——刷题篇

简介: 牛客网——刷题篇

文章目录

比较版本号

 二叉树的中序遍历

数组中只出现一次的两个数字

合并区间

比较版本号

 

知识点:字符串,双指针

题解:

import java.util.*;

public class Solution {


public int compare (String version1, String version2) {
    // write code here
    String[] numsOfV1 = version1.split("\\."); // 记得这里分割的时候需要加两个斜杠
    String[] numsOfV2 = version2.split("\\.");
    
    int index = 0;
    
    while (index < numsOfV1.length && index < numsOfV2.length) {
        int num1 = Integer.parseInt(numsOfV1[index]);
        int num2 = Integer.parseInt(numsOfV2[index]);
        if (num1 > num2) {
            return 1;
        } else if (num1 < num2) {
            return -1;
        }
        index ++;
    }
    
    while (index < numsOfV1.length) {
        int num1 = Integer.parseInt(numsOfV1[index]);
        if (num1 > 0) {
            return 1;
        }
        index ++;
    }
    
    while (index < numsOfV2.length) {
        int num2 = Integer.parseInt(numsOfV2[index]);
        if (num2 > 0) {
            return -1;
        }
        index ++;
    }
    
    return 0;
}

}
 二叉树的中序遍历

 

知识点:树,递归,广度优先搜索(BFS)

 题解:

import java.util.*;

/*

  • public class TreeNode {
  • int val = 0;
  • TreeNode left = null;
  • TreeNode right = null;
  • public TreeNode(int val) {
  • this.val = val;
  • }
  • }

*/

public class Solution {

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @return int整型一维数组
 */
public int[] inorderTraversal (TreeNode root) {
    // write code here
    if(root == null)return new int[0];
    ArrayList<Integer> ans = new ArrayList<>();
    inOrder(root, ans);
    int[] res = new int[ans.size()];
    int i=0;
    for(int n: ans){
        res[i++] = n;
    }
    return res;
}
public void inOrder(TreeNode node, ArrayList<Integer> ans){
    if(node == null)return;
    inOrder(node.left, ans);
    ans.add(node.val);
    inOrder(node.right, ans);
}

}
数组中只出现一次的两个数字

 

知识点:位运算,哈希

 题解:

import java.util.*;

public class Solution {

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @return int整型一维数组
 */
public int[] FindNumsAppearOnce (int[] array) {
    // write code here
    int tmp = 0, n = array.length;
    for(int i=0; i<n; i++){
        tmp ^= array[i];
    }
    int div = 1;
    while(tmp != 0){
        if((tmp & 1) == 1) div <<= 1;
        tmp >>= 1;
    }
    int a = 0, b = 0;
    for(int i=0; i<n; i++){
        if((array[i] & div) != 0) a ^= array[i];
        else b ^= array[i];
    }
    return new int[]{b, a};
}

}
合并区间

知识点:排序,数组

题解:

import java.util.*;
/**

  • Definition for an interval.
  • public class Interval {
  • int start;
  • int end;
  • Interval() { start = 0; end = 0; }
  • Interval(int s, int e) { start = s; end = e; }
  • }

*/
public class Solution {

public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
    if (intervals.size() == 0) {
        return new ArrayList<>();
    }
    Collections.sort(intervals, new Comparator<Interval>() {
        public int compare(Interval o1, Interval o2) {
            if (o1.start != o2.start) {
                return o1.start - o2.start;
            } else {
                return o1.end - o2.end;
            }
        }
    });
    
    ArrayList<Interval> result = new ArrayList<>();
    result.add(intervals.get(0));
    int count = 0;
    for (int i = 1; i < intervals.size(); i++) {
        Interval o1 = intervals.get(i);
        Interval origin = result.get(count);
        if (o1.start > origin.end) {
            result.add(o1);
            count++;
        } else {
            result.remove(count);
            Interval s = new Interval(origin.start, o1.end);
            if (o1.end < origin.end) {
                s.end = origin.end;
            }
            result.add(s);
        }
    }
    return result;
    
}

}

相关文章
|
监控 开发工具 Android开发
ARMS 用户体验监控正式发布原生鸿蒙应用 SDK
阿里云 ARMS 用户体验监控(RUM)推出了针对原生鸿蒙应用的 SDK。SDK 使用 ArkTS 语言开发,支持页面采集、资源加载采集、异常采集及自定义采集等功能,能够全面监控鸿蒙应用的表现。集成简单,只需几步即可将 SDK 接入项目中,为鸿蒙应用的开发者提供了强有力的支持。
694 107
|
算法 Java
闲话银行家舍入法,以及在程序中如何实现
闲话银行家舍入法,以及在程序中如何实现
681 0
|
12月前
|
JavaScript 前端开发 Java
编程语言中的常见Bug及解决方案
本文总结了主流编程语言中的常见Bug及其解决方案,涵盖JavaScript、Python、C/C++、Java和Go。例如,JavaScript中小数相加精度不准确,可通过`toFixed()`解决;Python 2中整数除法向下取整,改用浮点数除法;C/C++内存管理与缓冲区溢出,使用安全函数如`snprintf`;Java空指针异常,使用非空判断或`Optional`类;Go并发编程中的竞态条件,采用互斥锁或原子操作。了解这些Bug及解决方案有助于提高编程质量。
298 9
|
安全 网络安全 数据安全/隐私保护
社会工程学攻击:了解并预防心理操控的网络欺诈
社会工程学攻击:了解并预防心理操控的网络欺诈
835 7
|
资源调度 JavaScript 前端开发
一文带你了解和使用vue-cli(2024年11月)
欢迎来到我的博客!我是一名热爱前端技术的大一学生,自学JavaScript与Vue已两年半,目前正向全栈工程师迈进。如果你从我的博客中有所收获,欢迎关注我,我会持续更新更多优质内容,一起成长!🎉🎉🎉
525 0
一文带你了解和使用vue-cli(2024年11月)
|
安全 搜索推荐 Android开发
揭秘iOS与Android系统的差异:一场技术与哲学的较量
在当今数字化时代,智能手机操作系统的选择成为了用户个性化表达和技术偏好的重要标志。iOS和Android,作为市场上两大主流操作系统,它们之间的竞争不仅仅是技术的比拼,更是设计理念、用户体验和生态系统构建的全面较量。本文将深入探讨iOS与Android在系统架构、应用生态、用户界面及安全性等方面的本质区别,揭示这两种系统背后的哲学思想和市场策略,帮助读者更全面地理解两者的优劣,从而做出更适合自己的选择。
|
Java 测试技术 数据安全/隐私保护
📖Java零基础-while循环语句的深度解析
【10月更文挑战第6天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
448 1
|
网络协议 物联网 5G
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第六版(IPv6)的发展背景、技术特性及其在现代网络中的应用。通过分析IPv4面临的地址枯竭问题,阐述了IPv6作为解决方案的重要性和紧迫性。文章详细介绍了IPv6相较于IPv4的改进之处,如更大的地址空间、简化的包头格式、增强的组播支持等,并探讨了IPv6在实际部署中遇到的挑战及应对策略。通过对IPv6过渡技术和双栈技术的讨论,揭示了其在促进下一代互联网发展中的关键作用。此外,文章还展望了IPv6在未来网络安全、物联网整合以及新兴技术中的应用前景,强调了掌握IPv6技术对于把握未来互联网发展趋势的重要性。
339 11
|
机器学习/深度学习 自动驾驶 算法
深度学习在自动驾驶汽车中的应用
深度学习在自动驾驶汽车中的应用
|
机器学习/深度学习 人工智能 搜索推荐
探究人工智能在医疗健康中的应用与挑战
本文深入探讨了人工智能(AI)在医疗健康领域中的应用及其所面临的挑战。随着科技的不断进步,AI技术在医疗领域的应用日益广泛,从疾病诊断、治疗方案制定到患者护理等方面都展现出巨大的潜力。然而,尽管AI在医疗健康领域取得了显著成果,但也面临着数据隐私、算法偏见和伦理道德等方面的挑战。本文将详细介绍这些应用和挑战,并探讨可能的解决方案,以期为读者提供对AI在医疗健康领域发展的全面理解。

热门文章

最新文章