251. Flatten 2D Vector

Implement an iterator to flatten a 2d vector.
For example,
Given 2d vector =
[
  [1,2],
  [3],
  [4,5,6]
]

By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,2,3,4,5,6].
Follow up:

As an added challenge, try to code it using only iterators in C++ or iterators in Java

对比了discuss 仍然觉得我写的好…
beats 84.91% 下面就是我的code

public class Vector2D implements Iterator<Integer> {

    private Iterator<List<Integer>> all;
    private Iterator<Integer> cur;
    
    public Vector2D(List<List<Integer>> vec2d) {
        all = vec2d.iterator();
    }

    @Override
    public Integer next() {
        return cur.next();
    }

    @Override
    public boolean hasNext() {
        if (cur != null && cur.hasNext()) return true;
        //1.
        while(all.hasNext()){
            cur = all.next().iterator();
            if(cur.hasNext()) return true;
        }
        return false;
    }
}


1.为什么使用while 因为有可能有这种输入
[
    [1,2],
    [],
    [4,5,6]


``` def get_obs(self, F_i): """Extracts the observations from a complete vector of model output, and returns them as a vector.""" temp_obs, pres_obs, enth_obs = self.get_obs_states(F_i) obs = np.concatenate((temp_obs.flatten(), pres_obs.flatten(), enth_obs.flatten())) return obs def split_obs(self, G_i): """Splits a set of observations into temperatures, pressures and enthalpies.""" temp_obs = self.reshape_to_wells(G_i[self.inds_obs_temp]) pres_obs = self.reshape_to_wells(G_i[self.inds_obs_pres]) enth_obs = self.reshape_to_wells(G_i[self.inds_obs_enth]) return temp_obs, pres_obs, enth_obs @abstractmethod def downhole_temps(self): raise NotImplementedError() class DataHandler2D(DataHandler): def get_full_temperatures(self, F_i): temp = F_i[self.inds_full_temp] temp = np.reshape(temp, (self.mesh.nz, self.mesh.nx)) return temp def get_obs_temperatures(self, temp_full): """Extracts the temperatures at each observation point from a full set of temperatures.""" temp_full = np.reshape(temp_full, (self.mesh.nz, self.mesh.nx)) mesh_coords = (self.mesh.xs, self.mesh.zs) interpolator = RegularGridInterpolator(mesh_coords, temp_full.T) temp_obs = interpolator(self.temp_obs_cs) return self.reshape_to_wells(temp_obs) def downhole_temps(self, temps, well_depth=-1300): """Generates the downhole temperatures for a given well.""" mesh_coords = (self.mesh.xs, self.mesh.zs) interpolator = RegularGridInterpolator(mesh_coords, temps.T) zs = self.mesh.zs[self.mesh.zs >= well_depth] if abs(zs[-1] - well_depth) > 1e-8: zs = np.append(zs, well_depth) downhole_coords = np.array([[w.x, z] for z in zs for w in self.wells]) temp_well = interpolator(downhole_coords) return zs, self.reshape_to_wells(temp_well) class DataHandler3D(DataHandler): def get_full_temperatures(self, F_i): temp = F_i[self.inds_full_temp] return temp def get_obs_temperatures(self, temp_full): """Extracts the temperatures at each observation point from a full set of temperatures.""" interp = LinearNDInterpolator(self.mesh.tri, temp_full) temp_obs = interp(self.temp_obs_cs) return self.reshape_to_wells(temp_obs) def downhole_temps(self, temp_full, well_num): """Returns interpolated temperatures down a single well.""" well = self.wells[well_num] elevs = [l.centre for l in self.mesh.m.layer if well.min_elev <= l.centre <= well.max_elev] if well.min_elev not in elevs: elevs.append(well.min_elev) coords = np.array([[well.x, well.y, e] for e in elevs]) interp = LinearNDInterpolator(self.mesh.tri, temp_full) downhole_temps = interp(coords) return elevs, downhole_temps```在代码中进行解释,也就是在每一行后面加一个#解释
最新发布
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值