记一次算法练习

埃赛尔 · · 2821 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

算法一直是自己的弱项 通过算法来学习语言吧

Java版:

/**
 * 算法练习 1
 * Created by Exile on 2017/5/25.
 * 1 N(N为偶数)个数字,把数字平分 N/2 组,使得每组的数字和相等。
 */

public class ArithmeticTest1 {
//    题目1偶数个数组

    public static void main(String[] args) {
        int[] evenNumberArry = new int[]{1, 7, 2, 7, 6, 5, 2, 8, 3, 4};
        int arryNum = evenNumberArry.length / 2;
//        1 计算sum;
        int sum = 0;
        for (int i : evenNumberArry) {
            sum = sum + i;
        }
//      2  计算出每组的和是多少
        int arryMax = sum / arryNum;

        for (int i = 0; i < evenNumberArry.length; i++) {
            int value = arryMax - evenNumberArry[i];
            int temp;
//     假定一定会有一个与之组成一组
            for (int j = i + 1; j < evenNumberArry.length; j++) {
                if (evenNumberArry[j] == value) {
                    temp = evenNumberArry[i + 1];
                    evenNumberArry[i + 1] = value;
                    evenNumberArry[j] = temp;
                }
            }
        }
        for (int i : evenNumberArry) {
            System.out.println(i);
        }
    }
}

import java.util.ArrayList;
import java.util.Random;

/**
 * 算法练习 2
 * Created by Exile on 2017/5/25.
 * NxN的棋盘,每个格子可以放一个车,有M个车,问:每个车放完后,棋盘还剩多少格子是所有车攻击范围外?
 * 车可以重叠
 */

public class ArithmeticTest2 {
    public static void main(String[] args) {
//        n和m
        int m = 3;
        int n = 3;
        ArrayList<Model> modelList = createModelList(m, n);
        ArrayList<Model> manList = new ArrayList<>();
        for (Model model : modelList) {
            System.out.println("当前model:" + model.toString());
        }
//        方法1:从头到尾撸一遍
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                manList.add(new Model(i, j));
            }
        }
        System.out.println("筛选前:" + manList.size());
//        速度太快的话会出问题
        for (int i = 0; i < modelList.size(); i++) {
            for (int j = 0; j < manList.size(); j++) {
                if (!modelList.get(i).getAttackOutCall(manList.get(j))) {
                    manList.remove(j);
                }
            }
        }

//        }
        System.out.println("筛选后:" + manList.size());
        for (Model model : manList) {
            System.out.println(model.toString());
        }
    }


    /**
     * 根据输入的mn生成对应个数的m对象
     *
     * @param m
     * @param n
     * @return
     */
    private static ArrayList<Model> createModelList(int m, int n) {
        ArrayList<Model> models = new ArrayList<>();
        for (int i = 0; i < m; i++) {
            models.add(new Model(n));
        }
        return models;
    }

    public static class Model {
        private int x;
        private int y;

        public Model(int n) {
            Random random = new Random();
            this.x = random.nextInt(n);
            this.y = random.nextInt(n);
        }

        public Model(int x, int y) {
            this.x = x;
            this.y = y;
        }

        public int getX() {
            return x;
        }

        public int getY() {
            return y;
        }

        @Override
        public String toString() {
            return "Model{" +
                    "x=" + x +
                    ", y=" + y +
                    '}';
        }

        public boolean getAttackOutCall(Model mainModel) {
            if (this.getX() == mainModel.getX() || this.getY() == mainModel.getY()) {
                return false;
            }
            return true;
        }
    }
}

golang版:


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:埃赛尔

查看原文:记一次算法练习

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

2821 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传