Forwarded from dnaugsuz
啊第一眼看成超级牛, mn 我一时眼花了,写完再看才发现是 (<)序单调增 啊…… 斜二分不能,的确是只能先 list(flatten(xss)) 🤔
如果点用 [i,j] 表示的话的确可行,是
不过写起来应该有点不方便
如果点用 [i,j] 表示的话的确可行,是
sibling = (n) => [n-1,n,n+1]; iter.product(sibling((iML+iMR)/2), sibling((iNL+iNR)/2)) 3*3个不过写起来应该有点不方便
Forwarded from dnaugsuz
不过人家问的是存在性而不是索引号,这样的话直接位并集也是方便的算法 🌝
当然大O并没有缩小就是了,T常量变小而已
当然大O并没有缩小就是了,T常量变小而已
Forwarded from dnaugsuz
再考虑下九宫格 bsearch ,刚才是比较 v<xs[(iR-iL)//2] ,二维纵向不单调不能拆分两层,也只能逐个判断坐标了 🤔为了简化就做成四宫格 UDLR ,没用 numpy
真是头疼呢,但只有写出来才有意义
def shape(a,fname="__iter__"):
return [len(a)]+(shape(a[0]) if len(a)!=0 and hasattr(a[0],fname) else [])
def zeromap(f, xs):
for i,x in enumerate(xs):
for y in f(x): o = xs.copy(); o[i] = y; yield o
def quadBsearch(v, a, div2=lambda n: n//2):
(n,m) = shape(a)
sibling = lambda n: (n+d for d in [-1,+1])
def atSub(i0, i1, j0, j1):
i=div2(i1-i0); j=div2(j1-j0)
[l,r,u,d] = (a[i][j] for i,j in zeromap(sibling, [i,j]))
cv = a[i][j]
if cv==v: return [i,j]
# 然后对 LR 和 UD 能有什么操作呢,操作 i0/1 没有 ij 斜向单调序的保证 也无法排除任何项吧... [0][m-1] 就大于 [n-1][m-1] 的可能性也是有的吧
return atSub(0,n, 0,m)Forwarded from dnaugsuz
这个人就是 wtm 好 f**k 啊, linear search 个 for()return true; return false; 他也能写这么长,这么乱 仿佛写乱了速度就快一样我去
Forwarded from dnaugsuz
你们真的确定 a[i][j] 有 a[i][0]<a[i+1][0] 和 a[i][j]<a[i][j+1] 两个 prop 就能二维 bsearch 优化了,有没有什么细致点的思路啊
如果再保证 a[i][m-1]<a[i+1][0] 就可以直接用 flatten 了,基本没啥意义;可是如果不保证那最好估计是逐个 row 算 bounds 先选一遍吧…… bsearch 做不到,有 overlap ,太难了
四宫格都不知道怎么调,别说九宫格了…… 当卷积核还不错
如果再保证 a[i][m-1]<a[i+1][0] 就可以直接用 flatten 了,基本没啥意义;可是如果不保证那最好估计是逐个 row 算 bounds 先选一遍吧…… bsearch 做不到,有 overlap ,太难了
四宫格都不知道怎么调,别说九宫格了…… 当卷积核还不错
duangsues.is_a? SaltedFish
https://blog.csdn.net/sunshine2285/article/details/104866910/
噢,原来有 a[i][j]<a[i+1][j] & a[i][j]<a[i][j+1] ,ij 方向都有单调序,这就好办了,纵横向逐个算 ij 区间嘛,不对,纵向得连起来……
还是有点难
drop = (n,a) => [row[n:] for row in a[n:]] 的话边角都大些def quadBsearch(v, a, div2=lambda n: n//2):
(n,m) = shape(a)
def atSub(i0, i1, j0, j1):
i=div2(i1-i0); j=div2(j1-j0)
[l,r,u,d] = (a[i][j] for i,j in zeromap(sibling, [i,j]))
cv = a[i][j]
if cv==v: return [i,j]
return atSub(0,n, 0,m) 还是有点难
Forwarded from dnaugsuz
噢大概就是这个模板
def rectBsearch(v, a, div2=lambda n: n//2):
h,w = shape(a)
def inRect(ra):
i,j,n,m = ra; vc = a[i][j]
rects = lambda: [*bigger()] if vc<v else [*smaller()] if vc>v else []
return 1 if vc==v else sum(map(inRect, rects()))==0
return inRect([div2(h), div2(w), h, w])Forwarded from dnaugsuz
草,也是啊,为什么边角 LD i=max,j=0 就那么特殊
“选左下角,往右走增大,往上走减小,可选
“选左下角,往右走增大,往上走减小,可选
Forwarded from dnaugsuz
都知道有 prop ,但这种走迷宫一样的方法竟然没想到…… 反而首先想 sorted 可以 bsearch
#python #code
from PIL import Image
def sumPix(a,b): return tuple(aa+bb for aa,bb in zip(a,b))
def _drawHV(no):
def on(m, pa, xs):
xz = iter(xs)
for pb in range(img.size[no]):
p = (pb,pa) if no==0 else (pa,pb)
img.putpixel(p, sumPix(img.getpixel(p), next(xz)) )
return on
drawHorz = _drawHV(0)
drawVert = _drawHV(1)
img = Image.new("RGB", (50,50), "black")
def cv(i, ns):
c = [0 for _ in range(3)]
for num in ns: c[i] = num; yield tuple(c)
def color2(img):
(m,n) = img.size
for i in range(n): drawHorz(img, i, cv(1,range(m)))
for j in range(m): drawVert(img, j, cv(2,range(n)))
color2(img)
img.save("c2.png")
duangsues.is_a? SaltedFish
绿色的都比黄色小 红色都比黄色大 只要判断 黄色和你的数据的关系 就能排除掉 上面或者下面那一块
duangsuse:
二分查找还是分治嘛,对了它是几个指针来着 真的能斜切线吗
大 佬: #algorithm #Java #code
二分查找还是分治嘛,对了它是几个指针来着 真的能斜切线吗
大 佬: #algorithm #Java #code
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int lenSize = matrix.length;
int rowSize = matrix[0].length;
return search(matrix, 0, lenSize, 0, rowSize, target);
}
private boolean search(int[][] matrix, int a1, int b1, int a2, int b2, int target){
if(a1 == b1 || a2 == b2){
return false;
} else {
int mid1 = (a1 + b1) / 2;
int mid2 = (a2 + b2) / 2;
if(matrix[mid1][mid2] == target){
return true;
} else if(target > matrix[mid1][mid2]){
return search(matrix, a1, mid1 + 1, mid2 + 1, b2, target) || search(matrix, mid1 + 1, b1, a2, b2, target);
} else {
return search(matrix, mid1, b1, a2, mid2, target) || search(matrix, a1, mid1, a2, b2, target);
}
}
}
}Forwarded from dnaugsuz
不要 message 参数,在所有调用处
刚刚我还以为这个是成功消息(即有可能失败)
既然只是 message = "复制成功" 的默认值就没有必要弄了
有个比较疯狂的做法,但是行数短。
刚刚我还以为这个是成功消息(即有可能失败)
既然只是 message = "复制成功" 的默认值就没有必要弄了
有个比较疯狂的做法,但是行数短。
const el = (tag,conf,childs)=>{ let e=document.createElement(tag); conf(e); for (let ee of childs)e.appendChild(ee); return e; }, sets=(k,v)=>e=>{ e[k]=v },
withTempAppend=(e,e_dst,op)=>{
e_dst.appendChild(e); op(e); e_dst.removeChild(e);
};
copyToClip = (s) => { let e=el("input", sets("value",s)); withTempAppend(e, document.body, (it)=>{ it.select(); it.execCommand("copy"); }); }Forwarded from dnaugsuz
还有一个正经行数短的。
const also = (op, x) => { op(x); return x },
copyStr = (s) => also(it => { it.select(); it.execCommand("copy"); it.remove(); }, document.body.appendChild(document.createElement("input")));