1. 程式人生 > >【網易筆試題】戰鬥點

【網易筆試題】戰鬥點

這裡寫圖片描述

解題思路

  • 重複的點沒有必要去增加時間複雜度,
    先把point點簡化成沒有重複的新陣列norepeatvalues以及記錄每個新陣列的成員point對應的重複次數repeatcounts陣列;
  • 兩個點可以確定一條直線,假設有一個起始點Point[i]和Point[j],它們倆相連的斜率為k,其它只要和它們相連的點必定與它們在同一條直線上;當然,斜率不存在的極端情況也是要考慮在內的,斜率不存在的點,它們點X座標必定一樣;
  • 由於norepeatvalues的長度和對應的點重複的個數陣列repeatcounts長度不定,所以採用ArrayList陣列;

import java.util.ArrayList;
import java.util.Scanner;

public
class Main { static class Point { int x; int y; Point(int a, int b) { x = a; y = b; } } public static int maxPoints(Point[] points) { // Write your code here if (points == null) { return 0; } int
maxcount = 0; int len = points.length; if (len < 2) { return len; } ArrayList<Point> norepeatvalues = new ArrayList<Point>();// 簡化陣列,記錄不重複的陣列 ArrayList<Integer> repeatcounts = new ArrayList<Integer>();// 簡化陣列,記錄norepeatvalues.get[i]的元素對應的在Point數組裡面擁有的元素的重複個數
for (int i = 0; i < len; i++) { int repeatcount = 0; boolean isrepeatnum = false; for (int m = 0; m < norepeatvalues.size(); m++) { // 判斷這個Point是否是記錄已經存在的 if (norepeatvalues.get(m).x == points[i].x && points[i].y == norepeatvalues.get(m).y) { isrepeatnum = true; break; } } if (!isrepeatnum) { // 這個Point不是norepeatvalues記錄已經存在的,則繼續 for (int j = i + 1; j < len; j++) { if (points[i].x == points[j].x && points[i].y == points[j].y) { // repeatcounts陣列記錄有多少個和points[i]相同的點 repeatcount++; } } norepeatvalues.add(points[i]); repeatcounts.add(repeatcount); } } len = norepeatvalues.size(); if (len == 1) { // 如果只有一個非重複元素 return len + repeatcounts.get(0); } for (int i = 0; i < len - 1; i++) { for (int j = i + 1; j < len; j++) { int tempcount = 2 + repeatcounts.get(i) + repeatcounts.get(j); float k = 0f; boolean hasK = true;// 判斷斜率是否存在 if (norepeatvalues.get(i).x == norepeatvalues.get(j).x) { hasK = false; } else { k = (float) (norepeatvalues.get(i).y - norepeatvalues.get(j).y) / (norepeatvalues.get(i).x - norepeatvalues.get(j).x); } float b = norepeatvalues.get(i).y - k * norepeatvalues.get(i).x; for (int m = j + 1; m < len; m++) { if (hasK) { // 斜率存在 float curk = (float) (norepeatvalues.get(i).y - norepeatvalues.get(m).y) / (norepeatvalues.get(i).x - norepeatvalues.get(m).x); if (curk == k) { tempcount = tempcount + repeatcounts.get(m) + 1; } } else { // 斜率不存在 if (norepeatvalues.get(i).x == norepeatvalues.get(m).x) { tempcount = tempcount + repeatcounts.get(m) + 1; } } } if (tempcount > maxcount) { maxcount = tempcount; } } } return maxcount; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Point[] data = new Point[n]; for (int i = 0; i < n; i++) { data[i] = new Point(sc.nextInt(), sc.nextInt()); } System.out.println(maxPoints(data)); } }

相關推薦

試題戰鬥

解題思路 重複的點沒有必要去增加時間複雜度, 先把point點簡化成沒有重複的新陣列norepeatvalues以及記錄每個新陣列的成員point對應的重複次數repeatcounts陣列; 兩個點可以確定一條直線,假設有一個起始點Point[i]和P

試題遊戲卡牌

解題思路 首先測試樣例有錯誤,應該是 輸入 5 1 2 3 4 5 10 輸出 30 暴力解,找到所有和為m的求積。 import java.util.Scanne

試題——優雅的

題目 小易有一個圓心在座標原點的圓,小易知道圓的半徑的平方。小易認為在圓上的點而且橫縱座標都是整數的點是優雅的,小易現在想尋找一個演算法計算出優雅的點的個數,請你來幫幫他。 例如:半徑的平方如果為25 優雅的點就有:(+/-3, +/-4), (+/-4, +/

試題

java筆試昨天參加網易筆試遇到的,好難啊!!!題目要求——Java(只記得大致): 1、輸入一個值,表示接下來要輸入數組的個數;範圍:1~10^7 2、輸入一個值,表示下面數組裏元素的個數; 範圍:2~10^9 3、輸入一個數組A;

試題:推箱子

左右 esp 一行 else HA 經典的遊戲 clas 不能 box 大家一定玩過“推箱子”這個經典的遊戲。具體規則就是在一個N*M的地圖上,有1個玩家、1個箱子、1個目的地以及若幹障礙,其余是空地。玩家可以往上下左右4個方向移動,但是不能移動出地

試題:找出指定區間數列中能被3整除的個數

字符串 include namespace style 試題 AI () pan string 題目描述:給定一個數列:1,12,123,...,12345678910,1234567891011...,找出指定區間能被3整除的個數。 輸入描述:輸入兩個數字l和r,代表數列

試題??

nbsp strong 折半枚舉 OS 試題 條件 bsp div ron 題意 n個物品,背包容量w,問共有多少種放法(n≤30) 分析 折半枚舉即可 題意 x<=n y<=n x%y>=k 輸入n ,k 問有多少對x y滿足條件(

試題——計算機視覺_深度學習方向

選擇題 策略 空間 線性 對比 jks rbo 數字圖像處理 計算 選擇題知識點: 【1】大津法(OSTU算法)閾值分割中,閾值自動選擇的思路是: C:最大化類間方差法選擇閾值 解析:大津法(OTSU)是一種確定圖像分割閾值的算法,由日本學者大津於1979年提出;原理上

2019試題C++--豐收

block 一行 思路 使用 屬於 如果 簡單 代碼 for 題目描述 又到了豐收的季節,恰好小易去牛牛的果園裏遊玩。 牛牛常說他多整個果園的每個地方都了如指掌,小易不太相信,所以他想考考牛牛。 在果園裏有N堆蘋果,每堆蘋果的數量為ai,小易希望知道從左往右數第x個蘋果是

06試題_數對

牛牛以前在老師那裡得到了一個正整數數對(x, y), 牛牛忘記他們具體是多少了。 但是牛牛記得老師告訴過他x和y均不大於n, 並且x除以y的餘數大於等於k。 牛牛希望你能幫他計算一共有多少個可能的數對。 輸入描述: 輸入包括兩個正整數n,k(1 <= n <= 10^

瞌睡 (試題

題目描述 小易覺得高數課太無聊了,決定睡覺。不過他對課上的一些內容挺感興趣,所以希望你在老師講到有趣的部分的時候叫醒他一下。你知道了小易對一堂課每分鐘知識點的感興趣程度,並以分數量化,以及他在這堂課上每分鐘是否會睡著,你可以叫醒他一次,這會使得他在接下來的k分鐘內保持清醒

銳捷試題將整形變數a的最高n位清零,其它位不變,巨集定義:#define clear_bits(a,n)

銳捷昨天的一道網際網路C++筆試題,我的寫法如下: #define clear_bits(a,n)  (a)&~(((1<<n)-1)<<(32-n))  注:1、n應該加上括號,上面括號比較多,再寫上比較混亂,所以沒給n寫上括號,大家寫的

試題:輸入一個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列。

解題思路:           **找到數學規律。n以i為開頭的j個整數的和為i*j+j*(j-1)/2;判斷輸入的整數是否和計算結果相同。           如果相同則迴圈輸出以i為開頭的j個整數。           這個題目給我最大的啟示就是要學會用數學的方法來解決問題,在此之前我一直希望通過一種遞

C語言結構體的位元組對齊例項C語言試題

 一、筆試題目:在一個64位的作業系統中定義如下結構體: <span style="font-family:Microsoft YaHei;font-size:12px;">struct st_task { uint16_t id; uint32

每日一練——大數加減乘除運算實現(試題

前幾天做網易筆試題時最後一道題是設計一個大數類,實現加減運算,因為做這道題時只有5分鐘,結果我剛把類寫出來,考試時間就結束了。其實在去年12月我寫過一個RSA的加解密程式,其中就用到了大數的加減乘除運算(當然這只是RSA用到的一小部分),沒有把最後一題寫上去實在太可惜了(&

試題-堆棋子

題目 小易將n個棋子擺放在一張無限大的棋盤上。第i個棋子放在第x[i]行y[i]列。同一個格子允許放置多個棋子。每一次操作小易可以把一個棋子拿起並將其移動到原格子的上、下、左、右的任意一個格子中。小易想知道要讓棋盤上出現有一個格子中至少有i(1 ≤ i ≤ n)個棋子所需要的

試題 牛牛找工作

為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作後,牛牛的小夥伴們來找牛牛幫忙選工作,牛牛依然使用自己的標準來幫助小夥伴們。牛牛的小夥伴太多了,於是他只好把這

Java使用雲信簡訊介面,給手機使用者傳送並校驗驗證碼

package com.web; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.http.HttpResponse;

牛客 試題2017 簡單bfs

#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <queue> using namespa

HR之聲:技術筆試為何難過人文關 解剖試題

網易互動於2月啟動了06年社會招聘計劃,技術部熱聘職位:高階程式設計師、系統管理員、資料庫管理員、遊戲測試工程師。從CSDN人才論壇的討論、以及網易招聘部門的反饋來看,在網易的技術筆試題中,有一部分人文類的題目,難倒了很多人。舉幾個例子:筆試真題:1、分別安排下列字(斬、泰、