首页 文章 精选 留言 我的

精选列表

搜索[量子算法],共10004篇文章
优秀的个人博客,低调大师

常见算法示例

冒泡排序 for(int i =0;i<arr.length-1;i++) { for(int j=0;j<arr.length-i-1;j++) {//-1为了防止溢出 if(arr[j]>arr[j+1]) { int temp = arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } } 二分查找法 给定数组是按从小到大排序好的 //先排序 bubbleSort(arr); int left = 0; int right = arr.length - 1; int mid; while(left <= right){ mid = (left + right) % 2 == 0 ? (left + right) / 2 : (left + right) / 2 + 1; if(arr[mid] > val){ right = mid ; }else if (arr[mid] < val){ left = mid ; }else{ //找到该值 ** System.out.println(mid);** return; } } } 单链表反转 public class SingleLinkedList{ private static class Node{ private int val; private Node next; } //递归反转1-2-3-4 public Node reverse1(Node node){ if(node.next ==null || node== null){ return node; } Node temp= node.next; Node newNode = reverse1(node.next); node.next = null; temp.next = node; return newNode; } //遍历1-2-3-4 public Node reverse2(Node head){ Node prev = null; Node next = null; while (head != null){ next = head.next; head.next = prev; //在这里完成4->3->2->1 prev = head; head = next; } return prev; } }

优秀的个人博客,低调大师

贪心算法

贪心的过程要么是最大要么是最小,堆可以很好的满足这个要求。 问题1:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如 长度为20的 金条,不管切成长度多大的两半,都要花费20个铜 板。一群人想整分整块金 条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金条长度为 10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长 度60的金条分成10和50,花费60 再把长度50的金条分成20和30, 花费50 一共花费110铜板。 但是如果, 先把长度60的金条分成30和30,花费60 再把长度30 金条分成10和20,花费30 一共花费90铜板。 输入一个数组,返回分割的最小代价。 import java.util.Comparator; import java.util.PriorityQueue; public class ddd { public int lessMoney(int[] array){ PriorityQueue<Integer> minHeap = new PriorityQueue<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }); for(int i = 0; i < array.length; i++) minHeap.add(array[i]); while (minHeap.size() > 1){ int one = minHeap.poll(); int two = minHeap.poll(); minHeap.add(one + two); } return minHeap.poll(); } public static void main(String[] args) { int[] arr = {10, 20, 30, 10}; System.out.println(new ddd().lessMoney(arr)); } } 问题2:输入: 参数1,正数数组costs 参数2,正数数组profits 参数3, 正数k 参数4,正数m costs[i]表示i号项目的花费 profits[i]表示i号项目在扣除花 费之后还能挣到的钱(利润) k表示你不能并行、只能串行的最多 做k个项目 m表示你初始的资金 说明:你每做完一个项目,马上获得的收益,可以支持你去做下 一个 项目。 输出: 你最后获得的最大钱数。 import java.util.Comparator; import java.util.PriorityQueue; public class moreProfile { private class Node{ public int c; public int p; public Node(int c, int p){ this.c = c; this.p = p; } } public int moreProfile(int[] costs, int[] profits, int k, int m){ PriorityQueue<Node> minCost = new PriorityQueue<>(new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { return o1.c - o2.c; } }); PriorityQueue<Node> maxProfits = new PriorityQueue<>(new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { return o2.p - o1.p; } }); Node[] nodes = new Node[costs.length]; for(int i = 0; i < nodes.length; i++) nodes[i] = new Node(costs[i], profits[i]); for(int i = 0; i < nodes.length; i++) minCost.add(nodes[i]); for(int i = 0; i < nodes.length; i++){ while (!minCost.isEmpty() && minCost.peek().c <= m){ maxProfits.add(minCost.poll()); } if(maxProfits.isEmpty()) return m; m += maxProfits.poll().p; } return m; } public static void main(String[] args) { int[] costs = {10, 20, 5, 8, 100}; int[] profits = {5, 9, 1, 2, 30}; int k = 5, m = 30; System.out.println(new moreProfile().moreProfile(costs, profits, k, m)); } } 问题3: 给定一个字符串类型的数组strs,找到一种拼接方式,使得把所 有字 符串拼起来之后形成的字符串具有最低的字典序。 import java.util.Comparator; import java.util.PriorityQueue; public class Str { public String bestStr(String[] str){ PriorityQueue<String> minHeap = new PriorityQueue<>(new Comparator<String>() { @Override public int compare(String o1, String o2) { String one = o1 + o2; String two = o2 + o1; return one.compareTo(two); } }); for(int i = 0; i < str.length; i++) minHeap.add(str[i]); String res = ""; while (!minHeap.isEmpty()) res += minHeap.poll(); return res; } public static void main(String[] args) { String[] str = {"ba", "b" }; System.out.println(new Str().bestStr(str)); } } 问题4:一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目 的宣讲。 给你每一个项目开始的时间和结束的时间(给你一个数 组,里面 是一个个具体的项目),你来安排宣讲的日程,要求会 议室进行 的宣讲的场次最多。返回这个最多的宣讲场次。 import java.util.Comparator; import java.util.PriorityQueue; public class BestArrange { private class Program{ public int start; public int end; public Program(int start, int end){ this.start = start; this.end = end; } } public int BestArrange(Program[] pro, int start){ PriorityQueue<Program> minHeap = new PriorityQueue<>(new Comparator<Program>() { @Override public int compare(Program o1, Program o2) { return o1.end - o2.end; } }); for(int i = 0; i < pro.length; i++){ minHeap.add(pro[i]); } int res = 0; for(int i = 0; i < pro.length; i++){ if(start <= minHeap.peek().end){ res++; start = minHeap.poll().end; } } return res; } }

优秀的个人博客,低调大师

elasticsearch 排序 算法

如何将tfidf映射到[1,3] 区间内 (1)建立映射x→arctanx,此为一一映射,把全体实数R映射到开区间(-π/2,π/2)(2)开区间(-π/2,π/2)到开区间(0,1)只需要一个线性映射就可以,设为f(x)=ax+b,则有f(-π/2)=1且f(π/2)=3,解得a=2/π,b=2综合一下,映射x→2(arctanx)/π+2,即把全体实数映射到(1,3) 所以表达式可以写成 "script_score" : { "script" : "return atan(_score.doubleValue())*2/3.14159+2" } 为了只使用函数值 设置"boost_mode": "replace", 所以整个请求如下 curl -XGET 'http://localhost:9200/alias-product/product/_search?pretty&explain' -d '{ "size" : 1, "query" : { "function_score" : { "query" : { "bool" : { "should" : [ { "match" : { "_all" : { "query" : "关键字", "type" : "boolean", "operator" : "AND", "boost": 10 } } }, { "match" : { "company_name" : { "query" : "关键字", "type" : "boolean", "operator" : "AND", "boost": 10 } } } ], "minimum_should_match" : "1" } }, "functions" : [ { "script_score" : { "script" : "return atan(_score.doubleValue())*2/3.14159+2" } },{ "filter" : { "match" : { "company_name" : { "query" : "关键字", "type" : "boolean", "operator" : "AND" } } }, "weight" : 2 } ], "score_mode" : "sum", "boost_mode": "replace" } }, "aggregations" : { "agg" : { "terms" : { "field" : "member_id", "size" : 0, "order" : { "top_hit" : "desc" } }, "aggregations" : { "top_hit" : { "max" : { "script" : { "inline" : "_score" } } } } } } }' 本文转自whk66668888 51CTO博客,原文链接:http://blog.51cto.com/12597095/1942729

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册