美文网首页
【简单算法】

【简单算法】

作者: Y了个J | 来源:发表于2018-09-20 23:00 被阅读15次
1.不用中间变量,用两种方法交换A和B的值
// 1.中间变量
void swap(int a, int b) {
   int temp = a;
   a = b;
   b = temp;
}

// 2.加法
void swap(int a, int b) {
   a = a + b;
   b = a - b;
   a = a - b;
}

// 3.异或(相同为0,不同为1. 可以理解为不进位加法)
void swap(int a, int b) {
   a = a ^ b;
   b = a ^ b;
   a = a ^ b;
}
2.求最大公约数
/** 1.直接遍历法 */
int maxCommonDivisor(int a, int b) {
    int max = 0;
    for (int i = 1; i <=b; i++) {
        if (a % i == 0 && b % i == 0) {
            max = i;
        }
    }
    return max;
}

/** 2.辗转相除法 */
int maxCommonDivisor(int a, int b) {
    int r;
    while(a % b > 0) {
        r = a % b;
        a = b;
        b = r;
    }
    return b;
}

// 扩展:最小公倍数 = (a * b)/最大公约数
3.不用内置函数求一个数的平方根
网上查到用二分法,牛顿迭代法,求极限等方法

float sqrt(int num) {
 float mid=0f;
 float left = 0f;
 float right = num;
 while(left <right) {
     mid = (left+right)/2;
     if(Math.abs(mid*mid -num)==0){
        return mid;
     } else if (mid*mid -num<0){
        left=(mid+num)/2 ;
     } else {
        right=mid/2 ;
     }
 } 
 return mid;
}
4.用最有效率的方法计算2乘以8?

答: 2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。

5.链表反序
public Entry reverse() {
        Entry pre = null;
        Entry cur = head;
        Entry newHead = null;
        while (cur != null) {
            Entry curNext = cur.next;
            if (curNext == null) {
                newHead = cur;
            }
            cur.next = pre;
            pre = cur;
            cur = curNext;
        }
        return newHead;
    }

例如:a->b->c
解析
第一次 
cur=a;
curNext=b;
a.next=null;
pre=a;
cur=b;

第二次
cur=b;
curNext=c;
b.next=a;
pre=b;
cur=c;

第三次
cur=c;
curNext=null;
newHead=c;
c.next=b;
pre=c;
cur=null;

三次后变为:a<-b<-c
6.写个菜单树递归
private void buildSubs2(CategoryVO parent, List<CategoryVO> allList) {
        List<CategoryVO> children = new ArrayList<>();
        for (CategoryVO categoryVO : allList) {
            if (categoryVO.getParentId() == parent.getPid()) {
                children.add(categoryVO);
            }
        }
        if (!CollectionUtils.isEmpty(children)) {
            parent.setChildren(children);
            for (CategoryVO categoryVO : children) {
                buildSubs2(categoryVO, allList);
            }
        }
    }

相关文章

  • 算法与数据结构(二):排序篇-O(n^2)算法:选择 &

    排序基础 O(n^2)的算法虽然简单,但也实用!让我们从最简单的基础排序算法开始,打开我们的算法大门! 排序算法 ...

  • LZW压缩算法

    参考链接:超级简单的数据压缩算法—LZW算法压缩算法——lzw算法实现LZW算法 LZW 压缩算法正确图解

  • 简单算法

    冒泡排序: while 实现的二分查找: 递归实现二分查找:

  • 简单算法

    一、3种简单排序 3种排序方法时间复杂度都是n23种简单排序对 数组排序速度: 插入排序 > 选择排序 > 冒泡法...

  • 【简单算法】

    1.不用中间变量,用两种方法交换A和B的值 2.求最大公约数 3.不用内置函数求一个数的平方根 4.用最有效率的方...

  • 简单算法

    一、回文数说明:类似与"aaabaaa","ababa"等对称字符 二、数组去重说明:[1,2,3,4,5,1,7...

  • 简单算法

    面试算法题四部曲: clarification(询问题目细节,边界条件,可能的极端错误情况)。 Possible ...

  • 简单算法:

    快速排序 快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 ...

  • 简单算法

    实现 trim 斐波那契数列 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1...

  • 《机器学习(周志华)》学习笔记(三)

    Q:机器学习中最简单的学习算法是什么? A:最简单的机器学习算法莫过于线性回归算法了。线性回归算法的基本形式如下:...

网友评论

      本文标题:【简单算法】

      本文链接:https://www.haomeiwen.com/subject/kejonftx.html