zoukankan      html  css  js  c++  java
  • 一个面试题

    Python:解法

    import random

     """

        写一个函数输出一个数字中的数字组合的下一个最大组合。例如378的下一个最大的组合是387,71632下一个最大的组合是72136,如果没有更大的组合就返回-1(语言不限)

        例子分析:71632

        1、从数字后面往前看,如果一直递增则没有更大的组合,返回-1

        2、若发现更小的,比如上面1比6小,则从1后面的数字6、3、2中找出比1大的那个最小数为2,然后对剩下的数字1、3、6进行从小到大排序,最终组合为72136

    """

     def nextMaxCount(num):# 例子:4565321

        if num < 10:

            return -1

        L = [int(n) for n in str(num)] # L: [4,5,6,5,3,2,1]

        for i in range(len(L))[::-1]:

            if i == 0:

                return -1

            if L[i] > L[i-1]:

                newL = L[i:]    # newL: [6,5,3,2,1]

                currentNum = L[i-1]

                findNum = -1

                for j in range(len(newL))[::-1]:

                    findNum = newL[j]

                    if findNum > currentNum:

                        newL.pop(j)     # newL: [5,3,2,1]

                        newL.append(currentNum)# newL: [5,3,2,1,5]

                        newL = sorted(newL)# newL: [1,2,3,5,5]

                        break

                targetL = L[:i-1]

                targetL.append(findNum)

                targetL = targetL + newL

                s = ""

                for n in targetL:

                    s = s + str(n)

                return s

     for i in range(10):

        randomNum = random.randint(0,1000000)

        nextCout = nextMaxCount(randomNum)

        print(str(randomNum) + "--->" + str(nextCout))

    OC解法:

    // 写一个函数输出一个数字中的数字组合的下一个最大组合。例如378的下一个最大的组合是387,71632下一个最大的组合是72136,如果没有更大的组合就返回-1(语言不限)

    /*

        例子分析:71632

        1、从数字后面往前看,如果一直递增则没有更大的组合,返回-1

        2、若发现更小的,比如上面1比6小,则从1后面的数字6、3、2中找出比1大的那个最小数为2,然后对剩下的数字1、3、6进行从小到大排序,最终组合为72136

     */

    - (NSUInteger)nextMaxCountWithNum:(NSUInteger)num{ // 例子:4565321

        if (num < 10) {

            return -1;

        }

        NSMutableArray *nums = @[].mutableCopy;

        while (num) {

            [nums insertObject:@(num % 10) atIndex:0];

            num /= 10;

        }

        for (NSInteger i = nums.count - 1; i >= 0; i--) {// nums: [4,5,6,5,3,2,1]

            if (i == 0) {

                return -1;

            }

            if (nums[i] > nums[i - 1]) { // i = 2

            NSNumber *currentNum = nums[i-1];

                NSMutableArray *lastArr = [nums subarrayWithRange:NSMakeRange(i, nums.count - i)].mutableCopy;// lastArr: [6,5,3,2,1]

                NSNumber *findNum = 0;

                for (NSInteger j = lastArr.count - 1; j >= 0; j--) {

                    NSNumber *findN = lastArr[j];

                    if (findN > currentNum) {

                        findNum = findN;                 // findNum: 6

                        [lastArr removeObjectAtIndex:j]; // lastArr: [5,3,2,1]

                        [lastArr addObject:currentNum];  // lastArr: [5,3,2,1,5]

                        break;

                    }

                }

                [lastArr sortUsingComparator:^NSComparisonResult(NSNumber *obj1, NSNumber *obj2) {// lastArr: [1,2,3,5,5]

                    return obj1.integerValue > obj2.integerValue;

                }];

                NSMutableArray *targetArr = @[].mutableCopy;

                [targetArr addObjectsFromArray:[nums subarrayWithRange:NSMakeRange(0, i-1)]];// targetArr: [4]

                [targetArr addObject:findNum];                                               // targetArr: [4,6]

                [targetArr addObjectsFromArray:lastArr];                                     // targetArr: [4,6,1,2,3,5,5]

                NSString *targetStr = [targetArr componentsJoinedByString:@""];

                return targetStr.integerValue;

            }

        }

         return -1;

    }

  • 相关阅读:
    【板+背包】多重背包 HDU Coins
    【板+并查集判断连通性】并查集判断连通性
    【Dijstra堆优化】HDU 3986 Harry Potter and the Final Battle
    【区间筛】2017多校训练四 HDU6069 Counting Divisors
    【构造+DFS】2017多校训练三 HDU 6060 RXD and dividing
    【链表】2017多校训练三 HDU 6058 Kanade's sum
    【带权并查集】HDU 3047 Zjnu Stadium
    【优先级队列】 Holedox Eating
    ajax学习笔记3-jQuery实现ajax(大拇指向上)
    ajax学习笔记2-JSON形式返回(大拇指向上)
  • 原文地址:https://www.cnblogs.com/zhangmaliang/p/6401821.html
Copyright © 2011-2022 走看看