首页 > 试题广场 >

牛牛的交换排序

[编程题]牛牛的交换排序
  • 热度指数:283 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛牛有一个数组和一个数组,两个数组长度一样。其中,数组中只含有0和1这两种元素。
牛牛现在想对数组进行排序(从小到大),只不过牛牛只能通过不断地对数组中的元素进行交换操作来完成他的排序,具体交换操作如下:
当且仅当才可以交换,同时,交换的时候也会相应的发生交换。
牛牛是一个很懒的人,如果他觉得不能够排序成功(从小到大),那么他就放弃了。
现在牛牛想请你写一个程序,给定一个数组和一个数组,返回牛牛是否可以排序成功(从小到大),如果可以,返回"YES",反之,返回"NO"。

示例1

输入

3,[1,2,3],[0,0,0]

输出

"YES"

说明

a数组已是升序,不需要再排序,返回"YES"。 
示例2

输入

3,[3,2,1],[0,0,0]

输出

"NO"

说明

a数组非升序且不满足交换操作要求,无法完成排序,返回"NO"。 

备注:
,保证a[i]两两不同
只要b中有0和1,总能进行排序
发表于 2021-08-27 20:14:26 回复(0)
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 返回牛牛是否可以排序成功(从小到大),如果可以,返回"YES",反之,返回"NO"。
# @param n int整型 代表a数组和b数组的元素数量
# @param a int整型一维数组 代表a数组
# @param b int整型一维数组 代表b数组
# @return string字符串
#
class Solution:
    def sortArray(self , n , a , b ):
        # write code here
        if a != sorted(a,reverse=True):
            if sum(b[:])==0 or sum(b[:])==n:
                return "NO"
            else:
                return "YES"
        else:
            return "YES"

        
        
发表于 2021-04-23 11:47:14 回复(0)
首先判断是否为升序,升序的话,还判断个啥直接YES,
然后判断第二个数组有1,0组合吗 有的话就能变成升序.就直接YES
最后剩下的全是NO,没啥说的了
 public String sortArray (int n, int[] a, int[] b) {
        // write code here
        String flag = "NO";
        for(int i = 0 ; i < n-1 ;++i){
            if(a[i]>a[i+1]){
                flag = "NO";
                break;
            }
            flag = "YES";
        }
        for(int i = 0; i < n-1; ++i){
            if(b[i]!=b[i+1]){
                return "YES";
            }
        }
        return flag;
    }

发表于 2021-03-31 11:32:50 回复(1)