网站首页 > java教程 正文
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。
目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。
初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式聊到大数据框架,从大数据聊到人工智能,... ...。
如果有任何问题可以在文章后评论或者私信给我。
我会持续分享下去,敬请您的关注。
LeetCode 977. 求有序数组的平方再排序(Squares of a Sorted Array)
问题描述:
给定一个数组已排序的非递减整型数组A,返回一个新的有序非递减数组,里面的值是A中每个元素的平方。
注:
- 1 <= A.length <= 10000
- -10000 <= A[i] <= 10000
示例:
C语言实现:
这里注意一个很重要的条件,数组A是有序的,但是其值的范围包含负数和非负数。那么A会存在以下三种情况:
- 全部是非正整数,例如A=[-4, -3, -2, -1, 0],A^2=[16,9,4,1,0];
- 包含负整数和非负整数,例如[-3, -2, 1, 4, 5],A^2=[9,4,1,16,25];
- 全部是非负整数,例如[0, 1, 2, 3, 4],A^2=[0,1,4,9,16];
我们会发现如果我们从负数和非负数的临界值这个地方将数组A分左右两块的话,左边负数的平方是逆序的,而右边的是正序的。对于这种左右有序的数组排序,我们有一种很好的办法,就是从左右两边同时排序。
代码如下:
如代码所示,我们在排序的时候同时计算左右两边值的平方,并比较,将大的放到最右边,并且适时移动左右下标的位置,直到遍历完。时间复杂度O(n)。
python语言的实现:
这题对于python来说异常简单,可以直接排序。
代码如下:
Java语言的实现:
Java的实现和C语言的实现相同。
代码如下:
猜你喜欢
- 2024-10-22 Java几种排序方式(java排序的方法有哪些)
- 2024-10-22 Java排序算法——归并排序(Merge Sort)
- 2024-10-22 Java 集合中的排序算法浅析(java集合排序工具类)
- 2024-10-22 数组排序与二分查找法(二分查找排序树)
- 2024-10-22 Java中Arrays的两种排序方法(sort和parallelSort)比较
- 2024-10-22 深入理解Java中Comparable和Comparator排序
- 2024-10-22 Java常见知识之冒泡排序#冒泡排序
- 2024-10-22 Java数组之Arrays方法(java array数组)
- 2024-10-22 常用集合的排序方法——Java进阶知识讲义系列(七)
- 2024-10-22 Java数组(java数组初始化)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)